2015-01-06 31 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