我真的不明白为什么以及后台会发生什么,所以请帮助我。 我有一个简单的ListView:
<ListView Height="100" HorizontalAlignment="Left" Margin="67,84,0,0" ItemsSource="
{Binding Path=ListBinding}" Name="listView1" VerticalAlignment="Top" Width="351" />
和一个按钮:
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="162,41,0,0"
Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
我将datacontext设置为我的&#34; viewmodel&#34;类:
InitializeComponent();
this.DataContext = new VM1();
现在,如果我在VM1的构造函数中初始化了obscollection,那么当我使用button1_click函数填充ListBinding时绑定有效:
private void button1_Click(object sender, RoutedEventArgs e)
{
(this.DataContext as VM1).Do();
}
public VM1()
{
ListBinding = new ObservableCollection<string>();
}
public void Do()
{
ListBinding.Add("VM1 works 1");
ListBinding.Add("VM1 works 2");
}
但如果我在Do()函数中初始化它,它不会:
public VM1()
{ }
public void Do()
{
ListBinding = new ObservableCollection<string>();
ListBinding.Add("VM1 NOT works 1");
ListBinding.Add("VM1 NOT works 2");
}
我想这个问题的答案可能只是一个班轮,我想了解&#34;为什么&#34;。 谢谢!
答案 0 :(得分:1)
您没有列出ListBinding属性的代码。 属性setter必须调用NotifyOfPropertyChange,以便更新绑定。 ObservableCollection自动更新列表更改的CONTENTS,而不是整个列表对象。
希望有所帮助。
编辑:这是属性的代码:
private ObservableCollection<string> _listBinding // backing field
public ObservableCollection<string> ListBinding
{
get { return _listBinding; }
set {
_listBinding = value;
NotifyOfPropertyChange("ListBinding"); // let the bindings update
}
}