TrulyObservableCollection无法接收UI值修改通知的解决方法问询
解决方法
核心原因是集合内的ViewItemModel没有实现INotifyPropertyChanged接口,TrulyObservableCollection的ItemChanged事件依赖集合元素自身的属性变更通知才能触发,按以下步骤修改即可:
- 改造
ViewItemModel类,继承INotifyPropertyChanged接口,属性变更时主动抛出通知:
using System.ComponentModel; using System.Runtime.CompilerServices; public class ViewItemModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; // 触发属性变更通知的方法,[CallerMemberName]可自动获取调用的属性名,无需手动传参 private void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private string _name; public string Name { get => _name; set { _name = value; OnPropertyChanged(); } } private object _value; public object Value { get => _value; set { _value = value; OnPropertyChanged(); } } }
- (可选优化)如果需要TextBox输入过程中实时触发变更通知,而不是等TextBox失去焦点才触发,可以修改XAML中TextBox的绑定配置,添加
UpdateSourceTrigger=PropertyChanged:
<TextBox Width="100" Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
- 验证效果:修改TextBox值后,
ViewItemModels_ItemChanged事件会正常触发,通过事件参数e可以获取到被修改的对象实例、变更的属性名,要获取全量最新值直接遍历viewItemModels集合即可。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

