带有 ObservableCollection 源的 TreeView,没有更新

TreeView with ObservableCollection Source, no update

我创建了一个绑定到 ObservableCollection 的简单 Treeview。

ObservableCollection<IMarketDataViewModel> MarketDataItems;

public interface  IMarketDataViewModel
{
    string Title { get; }
    ObservableCollection<IMarketDataViewModel> Items { get; set; }
}

public MarketDataUserControl(IMarketDataViewer viewModel)
{
    InitializeComponent();
    DataContext = viewModel;
    marketDataTreeView.ItemsSource = viewModel.MarketDataItems;
}

当我更新我的 ViewModel 中的数据时,我只能在我的 Treeview 中看到第一层。我发现解决问题的唯一方法是在我的 ViewModel 中创建一个事件,当数据更新而不是调用 MarketDataItems 上的 PropertyChange 时,我触发了事件并像这样重置视图 marketDataTreeView.ItemsSource:

private void ViewModelOnOnUpdateItems()
{
   marketDataTreeView.ItemsSource = null;
   marketDataTreeView.ItemsSource = viewModel.MarketDataItems;
}

而且这项工作非常完美 --> 显示所有级别。

有人知道为什么 PropertyChange 不起作用以及为什么我必须重置 ItemsSource 吗?

我认为您应该实现对 ItemSource 的绑定,这是由 属性:

完成的
// Create property
public ObservableCollection<IMarketDataViewModel> MarketDataItems { get; private set; }
...

// Create Binding
Binding bindingObject = new Binding("MarketDataItems");
bindingObject.Source = this; //codebehind class instance which has MarketDataItems
marketDataTreeView.SetBinding(TreeView.ItemsSource, bindingObject);

或XAML中的绑定:

<TreeView x:Name="marketDataTreeView" ItemsSource="{Binding Path=MarketDataItems}"/>

最后的问题是我没有调用 OnPropertyChanged("Items")

public class MarketDataViewModelBase : IMarketDataViewModel, INotifyPropertyChanged
{
    .....

    private ObservableCollection<IMarketDataViewModel> items;

    public ObservableCollection<IMarketDataViewModel> Items
    {
        get { return items; }
        set
        {
            items = value;
            OnPropertyChanged("Items"); //Add this line fix my issue
        }
    }
 }