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" 属性 可以在更改时发出通知,因此只需更改它而不是绑定。绑定只是将视图与视图模型耦合的一种方式。如果数据源因按下按钮而发生变化,则数据源应该在视图模型中发生变化,而不是在视图中发生变化。