wpf 绑定在 xmas 更新但不在代码后面
wpf binding in xmas updated but not in code behind
我有一个 ItemsCollection 被绑定到一个对象数组,如下所示:
<ItemsControl x:Name="Graph" ItemsSource="{Binding MyData.ItemsData}">...
我希望能够根据按下按钮更改 ItemsSource,所以我将它移动到代码隐藏中,如下所示:
Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty,
new Binding { Source = MyViewModel.MyData.ItemsData });
我的问题是,在代码隐藏中设置绑定时,数据更改时不会更新,而在 xaml 中设置时会更新。
我的数据 class 看起来像:
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;
谁能解释为什么会这样?
谢谢!
绑定的 Source
是托管 属性 的对象,而不是 属性 本身。
你想要:
Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty,
new Binding("ItemsData") { Source = MyViewModel.MyData });
但是,由于您已经有一个 "ItemsData" 属性 可以在更改时发出通知,因此只需更改它而不是绑定。绑定只是将视图与视图模型耦合的一种方式。如果数据源因按下按钮而发生变化,则数据源应该在视图模型中发生变化,而不是在视图中发生变化。
我有一个 ItemsCollection 被绑定到一个对象数组,如下所示:
<ItemsControl x:Name="Graph" ItemsSource="{Binding MyData.ItemsData}">...
我希望能够根据按下按钮更改 ItemsSource,所以我将它移动到代码隐藏中,如下所示:
Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty,
new Binding { Source = MyViewModel.MyData.ItemsData });
我的问题是,在代码隐藏中设置绑定时,数据更改时不会更新,而在 xaml 中设置时会更新。
我的数据 class 看起来像:
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;
谁能解释为什么会这样?
谢谢!
绑定的 Source
是托管 属性 的对象,而不是 属性 本身。
你想要:
Analyzer.Graph.SetBinding(ListView.ItemsSourceProperty,
new Binding("ItemsData") { Source = MyViewModel.MyData });
但是,由于您已经有一个 "ItemsData" 属性 可以在更改时发出通知,因此只需更改它而不是绑定。绑定只是将视图与视图模型耦合的一种方式。如果数据源因按下按钮而发生变化,则数据源应该在视图模型中发生变化,而不是在视图中发生变化。