WPF 数据绑定未更新 UI

WPF Databinding Not Updating UI

我有一个 XAML 和 UserControl 的 CS 文件。我将数据存储在实现 INotifyPropertyChanged 的​​ Singleton class 中,并绑定到 UserControl 中的 ListBox。

这是 XAML 数据绑定:

<ListBox Name="ModsListBox"
    ItemsSource="{Binding ModControls}"
    Visibility="Visible"
    Width="350"
    Height="Auto">
</ListBox>

数据上下文在 CS 文件中设置如下:

DataContext = ModDirector.Instance;
InitializeComponent();

在代码中有一个添加元素的方法,它添加了被绑定的数据结构,然后调用 OnPropertyChanged(),但是 UI 永远不会更新。

    /// <summary>
    /// Adds a mod and sends event to update UI elements bound to ModContols
    /// </summary>
    /// <param name="modUserControl"></param>
    /// <param name="index"></param>
    public void AddMod(ModUserControl modUserControl, int? index = null)
    {
        if (index != null)
        {
            _modControls.Insert(index.Value, modUserControl);
        }
        else
        {
            _modControls.Add(modUserControl);
        }
        OnPropertyChanged("ModControls");
    }

只是为了完成这里是 属性 它被绑定到:

/* Properties */
    public List<ModUserControl> ModControls
    {
        get { return _modControls; }
        set
        {
            _modControls = value;
            OnPropertyChanged();
        }
    }
    /* End Properties */

以及 OnPropertyChanged 的​​代码

/// <summary>
    /// Fires PropertyChanged event notifying the UI elements bound
    /// </summary>
    /// <param name="propertyName"></param>
    [NotifyPropertyChangedInvocator]
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

事件不会传播的原因是什么?

您的 public List<ModUserControl> ModControls 可能应该是 ObservableCollection<>,这样您就可以删除对 OnPropertyChanged("ModControls"); 的手动调用。您的 ModControls 实际上并没有改变。它仍然是同一个实例。

将您的 List<ModUserControl> 更改为 ObservableCollection<ModUserControl>