C# Listview不会在WPF中自动更新

C# Listview不会在WPF中自动更新,c#,wpf,listview,mvvm,C#,Wpf,Listview,Mvvm,我有一个列表视图,显示搜索框的搜索结果。加载窗口时,数据库中的所有数据都显示在listview中-“这很好” 但当我搜索时,视图模型中的变量会改变并存储新数据,但listview不会显示变量中的新数据 listview的XAML代码 <ListView x:Name="itemsListView" ScrollViewer.CanContentScroll="True" ItemsSource="{Binding Rows, UpdateSourceTr

我有一个列表视图,显示搜索框的搜索结果。加载窗口时,数据库中的所有数据都显示在listview中-“这很好”

但当我搜索时,视图模型中的变量会改变并存储新数据,但listview不会显示变量中的新数据

listview的XAML代码

<ListView x:Name="itemsListView" ScrollViewer.CanContentScroll="True"
                  ItemsSource="{Binding Rows, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
              Grid.Row="1"
              HorizontalAlignment="Stretch"  
              VerticalAlignment="Stretch"
              Margin="40,10,40,10"
              FlowDirection="RightToLeft" IsSynchronizedWithCurrentItem="True" SelectedIndex="1">
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn DisplayMemberBinding="{Binding BankName}" 
                            Width="250"
                            Header="bank name"/>
            <GridViewColumn DisplayMemberBinding="{Binding Credit}" 
                            Header="credit"
                            Width="100"/>
            <GridViewColumn DisplayMemberBinding="{Binding IsActive}" 
                            Header="statue"
                            Width="100"/>
            <GridViewColumn DisplayMemberBinding="{Binding Notes}" 
                            Header="notes"
                            Width="230"/>
        </GridView>
    </ListView.View>
</ListView>

视图模型代码

class BanksVM 
{
    private ObservableCollection<BanksListVM> m_Rows;

    public ObservableCollection<BanksListVM> Rows
    {
        get { return m_Rows; }
        set { m_Rows = value; }
    }

    private string _BanksSearchBox;

    public string BanksSearchBox
    {
        get { return _BanksSearchBox; }
        set {
            _BanksSearchBox = value;
            SearchInBanksMethod();
        }
    }

    //set all data to listview
    public BanksVM()
    {
        Rows = new ObservableCollection<BanksListVM>();
        Rows.Clear();

        List < Banks > bankslist = new List<Banks>();
        Banks banks = new Banks();
        bankslist = banks.GetAllBanks();

        foreach (Banks b in bankslist)
        {
            string IsActive = "";

            if (b.IsActive == true)
                IsActive = "open";
            else
                IsActive = "closed";

            Rows.Add(new BanksListVM
            {
                ID = b.ID,
                BankName = b.BankName,
                IsActive = IsActive,
                Credit = b.Credit,
                Notes = b.Notes
            });
        }
    }

    // refresh listview method
    public void SearchInBanksMethod() { 
        Rows = new ObservableCollection<BanksListVM>();
        Rows.Clear();

        List<Banks> bankslist = new List<Banks>();
        search Search = new search();
        bankslist = Search.SearchInBanks(_BanksSearchBox);

        foreach (Banks b in bankslist)
        {
            string IsActive = "";

            if (b.IsActive == true)
                IsActive = "open";
            else
                IsActive = "closed";

            Rows.Add(new BanksListVM
            {
                ID = b.ID,
                BankName = b.BankName,
                IsActive = IsActive,
                Credit = b.Credit,
                Notes = b.Notes
            });
        }
    }
}
classbanksvm
{
私有可观测收集m_行;
公共可观测收集行
{
获取{返回m_行;}
设置{m_Rows=value;}
}
专用字符串_BanksSearchBox;
公共字符串银行搜索框
{
获取{return\u BanksSearchBox;}
设置{
_BanksSearchBox=值;
SearchInBanksMethod();
}
}
//将所有数据设置为listview
公共银行
{
行=新的ObservableCollection();
行。清除();
列表<银行>银行列表=新列表();
银行=新银行();
bankslist=banks.GetAllBanks();
foreach(银行列表中的银行b)
{
字符串IsActive=“”;
如果(b.IsActive==true)
IsActive=“打开”;
其他的
IsActive=“已关闭”;
行。添加(新的BanksListVM)
{
ID=b.ID,
BankName=b.BankName,
IsActive=IsActive,
信用,
注释
});
}
}
//刷新列表视图方法
public void SearchInBanksMethod(){
行=新的ObservableCollection();
行。清除();
列表银行列表=新列表();
搜索=新搜索();
bankslist=Search.searchInBank(_BanksSearchBox);
foreach(银行列表中的银行b)
{
字符串IsActive=“”;
如果(b.IsActive==true)
IsActive=“打开”;
其他的
IsActive=“已关闭”;
行。添加(新的BanksListVM)
{
ID=b.ID,
BankName=b.BankName,
IsActive=IsActive,
信用,
注释
});
}
}
}

重新分配ObservableCollection时,不会通知绑定新属性值

搜索银行方法中,删除

Rows = new ObservableCollection<BanksListVM>();

如果使用new实例化Rows集合,则不需要清除它。仅在“SearchInBanksMethod”中使用“clear”,而不是指定新对象。还要确保BanksVM继承自INotifyPropertyChanged.OK,但这并不能解决应该解决问题的问题。我建议使用公共observeCollection行{get;set;}=new…();在这种情况下,您甚至不必在构造函数中设置它。在行中存储数据没有问题。问题是在列表视图中再次显示它。我确实理解您的问题。我做了一个回答,让事情变得更清楚。
Rows.Clear();