这个问题可能很多次被问过,但我看到了很多答案,我真的不知道该怎么做。
我有一个ListBox:
<listbox ItemSource="{Binding listitems}">
<ListBox.ItemTemplate>
<DataTemplate>
<grid>
<Textblock text="{Binding value1}">
<Textblock text="{Binding value2}">
</grid>
</DataTemplate>
</ListBox.ItemTemplate>
</listbox>
我有以下课程的列表:
List<Items> listitems = new List<Items>();
public class Items
{
public string value1 { get; set; }
public string value2 { get; set; }
}
有时,列表会更新(添加更多元素),我想让列表框知道列表已更新并相应地更新UI。
此时我手动将列表绑定到c#中的列表框中,当它更改时,我清除列表框并再次添加列表,这是不希望的。
我想知道列表框如何自动更新?
答案 0 :(得分:0)
使用ObservableCollection代替泛型List<T>
,在内部实现负责更新UI上元素的INotifyCollectionChanged
接口。
ObservableCollection<Items> listitems = new ObservableCollection<Items>();
修改强>
ListItems必须是property
。你不能用字段绑定它 -
ObservableCollection<Items> listitems = new ObservableCollection<Items>();
public ObservableCollection<Items> Listitems
{
get
{
return listitems;
}
set
{
listItems = value;
}
}
XAML -
<Listbox ItemSource="{Binding Listitems}">
答案 1 :(得分:0)
您必须将List
更改为ObservableCollection
并根据MVVM模式实现所有内容。
public ObservableCollection<Items> Listitems
{
get { return _listitems ; }
set
{
_listitems = value;
RaisePropertyChanged(() => Listitems );
}
}
答案 2 :(得分:0)
如果您使用的是List,则必须使用INotifypropertyChanged进行通知,否则可以使用ObservableCollection。
还必须使用NotifyOnSourceUpdated = True。