我有一个ItemsCollection绑定到一个对象数组,如下所示:
<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 :(得分:0)
绑定的Source
是托管属性的对象,而不是属性本身。
你想:
Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty,
new Binding("ItemsData") { Source = MyViewModel.MyData });
但是,因为你已经有一个&#34; ItemsData&#34;在更改时通知的属性,然后只更改它而不是绑定。绑定只是将视图耦合到viewmodel的一种方式。如果数据源因按下按钮而发生变化,则数据源应在视图模型中更改,而不是视图。