2015-01-06 32 views
1

代码我有一个ItemsCollection被绑定到对象的数组,像这样:WPF在圣诞节更新的结合而不是在背后

<ItemsControl x:Name="Graph" ItemsSource="{Binding MyData.ItemsData}">... 

我希望能够基于按下一个按钮来改变的ItemsSource所以我项目移至后台代码如下所示:

Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty, 
       new Binding { Source = MyViewModel.MyData.ItemsData }); 

我的问题是,在设置代码隐藏的绑定时,不更新数据时,它已经改变了,而这是在XAML中设置时。

我的数据类的样子:

private DataFreq[] _itemsData; 
public DataFreq[] ItemsData 
{ 
    get { return _itemsData; } 
    set 
    { 
     _itemsData = value; 
     NotifyPropertyChanged("ItemsData"); 
    } 
} 

,并正在设置这样的:

DataFreq[] tmpdata = new DataFreq[30]; 
...add data to tmpdata here 
MyViewModel.MyData.ItemsData = data; 

任何人都可以解释为什么这是怎么回事?

谢谢!

回答

0

结合的Source是承载的属性的对象,而不是属性本身。

你想:

Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty, 
      new Binding("ItemsData") { Source = MyViewModel.MyData }); 

不过,既然你已经有当它改变时通知的“ItemsData”属性,那么就改变,而不是结合。绑定只是将viewmodel视图耦合起来的一种方式。如果数据源由于按下按钮而改变,那么数据源应该在视图模型中而不是在视图中改变。

+0

完美,谢谢!另外,认为这是从这里复制:http://stackoverflow.com/questions/357033/c-sharp-data-binding-doesnt-update-wpf?rq=1 – user2424495