WPF MVVM框架下修改ListViewItem名称仅切换视图才更新问题
问题根因
ObservableCollection<T>仅会通知集合本身的结构变更(增、删、移动元素等),集合内部元素的属性变更需要元素类自行触发属性变更通知才能让UI实时响应。- 你的
MasterModel虽然继承了ObservableObject(已经内置了INotifyPropertyChanged实现),但绑定到UI显示的Name属性使用了无通知的自动实现属性,修改属性值时没有发送PropertyChanged事件,UI无法感知到变更,只有视图重新加载时才会读取最新的属性值,因此出现切换UserControl才刷新的现象。
解决方法
修改MasterModel中的Name属性,改为带属性变更通知的实现:
// 替换原来的 public string Name { get; set; } private string _name; public string Name { get => _name; set { _name = value; OnPropertyChanged(); } }
同时调整SetName方法,通过属性赋值触发通知:
public void SetName(string name) { Name = name; }
如果后续需要动态修改MasterModel的其他属性(如Host、Port等)并实时同步到UI,也需要按照同样的格式修改对应属性的实现。
内容的提问来源于stack exchange,提问作者Ivan Raul Sanchez Diaz
相关产品推荐
相关产品推荐

