首页 > 解决方案 > 当我使用 PropertyChanged 时 WPF ItemsControl 不刷新

问题描述

我有字符串列表和它的属性,只有get返回List<string>。所以,当我在列表中添加一些东西并调用OnPropertyChanged("NameOfProperty")它时,它不会刷新我ItemsControl的视图,但是当我在构造函数中添加一些东西时它会起作用。

主窗口

public MainWindow()
{
   InitializeComponent();
   DataContext = new MainWindowModel();
}

主窗口模型 C#

private static List<string> messages = new List<string>();
public List<string> Messages
{
   get
   {
      return messages;
   }
}

// ...

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }
}

// ...

public void foo()
{
   messages.Add("Hi");
   OnPropertyChanged("Messages");
}

主窗口 XAML

<ScrollViewer Grid.Row="0" Grid.Column="1" Margin="10, 0, 0, 0" Grid.ColumnSpan="2">
   <ItemsControl ItemsSource="{Binding Messages, Mode=OneWay}"/>
</ScrollViewer>

标签: c#wpfxamlbinding

解决方案


应该通知框架添加或删除项目的集合属性必须实现接口INotifyCollectionChanged

ObservableCollection中可以找到默认实现。因此,您可以将 Messages 属性类型更改为 ObservableCollection 而不是 List。


推荐阅读