C# Listview不会在WPF中自动更新
我有一个列表视图,显示搜索框的搜索结果。加载窗口时,数据库中的所有数据都显示在listview中-“这很好” 但当我搜索时,视图模型中的变量会改变并存储新数据,但listview不会显示变量中的新数据 listview的XAML代码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 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();