WinUI3 MVVM场景下绑定可观察属性的非可观察子属性方案问询
解决方案
场景1:仅切换选中文件夹实例时更新Name显示
这种场景你不需要做任何额外改造,WinUI的绑定原生支持嵌套属性路径,直接按如下写法绑定即可:
<TextBlock Text="{Binding ViewModel.SelectedFolder.Name, TargetNullValue='未选择文件夹'}" />
原理:你的SelectedFolder属性已经通过SetProperty触发了PropertyChanged通知,绑定引擎监听到SelectedFolder属性变更时,会自动重新读取新实例的Name属性值刷新UI,完全不需要修改FolderModel,也不需要新增额外属性或转换器。
场景2:修改已选中文件夹实例的Name属性时也需要更新UI
如果你需要在不切换SelectedFolder实例、仅修改该实例的Name属性时也同步更新UI,同时不想修改FolderModel实现INotifyPropertyChanged,可以在每次修改Name后,手动在ViewModel中触发对应属性的变更通知:
// 当你修改选中文件夹的Name后,调用以下代码即可触发UI刷新 RaisePropertyChanged(nameof(SelectedFolder.Name));
这个方案侵入性极低,不会破坏模型和ViewModel的解耦要求,也不会产生重复代码。
内容的提问来源于stack exchange,提问作者jdm
相关产品推荐
相关产品推荐

