c# - 当我使用 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>
解决方案
应该通知框架添加或删除项目的集合属性必须实现接口INotifyCollectionChanged。
在ObservableCollection中可以找到默认实现。因此,您可以将 Messages 属性类型更改为 ObservableCollection 而不是 List。
推荐阅读
- react-native - React Native - SQLite 事务不等待结果
- javascript - 即使使用删除运算符,对象属性也不会被删除
- ios - 快速通知实现
- javascript - VueJS:使用 vue refs 而不是 css id 来控制 div 元素是否有任何性能优势
- pdf - DocumentView 不包含 TabDocumentLoaded 的定义,并且没有扩展方法 TabDocumentLoaded 接受 DocumentView 类型的第一个参数
- flutter - 多个平面按钮链接到不同的列表视图,然后如何使未选中的按钮变灰(不聚焦)
- windows - 如何以我想要的格式将数字更改为命名月份,例如 11,如 11 月
- python - 如何为标题、摘要和日期选择正确的标签
- python - Python中优化的收敛曲线
- azure - 如何在 Azure 上使用沉浸式阅读器?