C# 将ItemSource绑定到listbox
这个问题以前可能被问过很多次,但我看到了太多的答案,我真的不知道该怎么办 我有一个列表框:C# 将ItemSource绑定到listbox,c#,xaml,C#,Xaml,这个问题以前可能被问过很多次,但我看到了太多的答案,我真的不知道该怎么办 我有一个列表框: <listbox ItemSource="{Binding listitems}"> <ListBox.ItemTemplate> <DataTemplate> <grid> <Textblock text="{Binding value1}">
<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; }
}
List listitems=new List();
公共类项目
{
公共字符串值1{get;set;}
公共字符串值2{get;set;}
}
有时,列表会被更新(添加了更多元素),我想让listbox知道列表已经更新,并相应地更新UI
此时,我手动将列表绑定到c#中的列表框,当列表框发生变化时,我清除列表框并再次添加列表,这是不需要的
我想知道listbox如何自动更新?而不是通用的
列表
,使用它在内部实现负责更新UI上元素的INotifyCollectionChanged
接口
ObservableCollection<Items> listitems = new ObservableCollection<Items>();
XAML-
<Listbox ItemSource="{Binding Listitems}">
您必须将
列表
更改为可观察收集
,并根据MVVM模式实现所有功能
public ObservableCollection<Items> Listitems
{
get { return _listitems ; }
set
{
_listitems = value;
RaisePropertyChanged(() => Listitems );
}
}
公共可观测集合列表项
{
获取{return\u listitems;}
设置
{
_列表项=值;
RaisePropertyChanged(()=>Listitems);
}
}
您必须对
项中的每个属性执行相同的操作。也用于绑定。您可以在网上找到许多不错的教程,如如果您使用的是列表,那么您必须使用INotifypropertyChanged进行通知,否则您可以使用ObservableCollection
还必须使用NotifyOnSourceUpdated=True。当我使用ObservableCollection listitems=new ObservableCollection()时,UI仍然不会更新,但如果没有MVVM模式,还有其他方法可以做到这一点吗?问题是我的应用程序几乎完成了,这是我最后的步骤之一。修复了它!但我会研究Prism的东西,并在我的下一个应用程序中使用它:)你需要使用属性而不是字段。请参阅更新的答案。不能与XAML中的字段绑定。
public ObservableCollection<Items> Listitems
{
get { return _listitems ; }
set
{
_listitems = value;
RaisePropertyChanged(() => Listitems );
}
}