如何用MVVM Community Toolkit的ObservableObject实现WPF运行时全球化
解决MVVM Community Toolkit中触发索引器属性变更的问题
在MVVM Community Toolkit的ObservableObject中,你可以直接调用基类提供的OnPropertyChanged方法,替代原来手动触发PropertyChanged事件的代码:
方案1:传递索引器属性名称字符串
直接传入索引器对应的属性名称即可,WPF默认索引器的属性名为Item[]:
// 替换原代码的 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("item[]")) OnPropertyChanged("Item[]");
方案2:传递PropertyChangedEventArgs实例
如果需要更明确的参数构造,也可以直接传入事件参数对象:
OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
注意事项
- 若你的索引器是自定义命名(比如用
[IndexerName("MyLocalizedItem")]特性修饰),则需要将Item[]替换为自定义名称加[],例如"MyLocalizedItem[]"。 - 确保你的ViewModel已继承
ObservableObject,这样才能直接调用OnPropertyChanged方法。
完整示例代码:
using CommunityToolkit.Mvvm.ComponentModel; public class LocalizationViewModel : ObservableObject { // 本地化索引器 public string this[string key] { get => GetLocalizedValue(key); } // 切换语言的方法 public void ChangeLanguage(string languageCode) { // 执行语言切换逻辑... // 触发索引器变更,通知UI更新所有绑定内容 OnPropertyChanged("Item[]"); } private string GetLocalizedValue(string key) { // 本地化字符串获取逻辑 return /* 返回对应语言的字符串 */; } }
内容的提问来源于stack exchange,提问作者Leong Wei Sheng
相关产品推荐
相关产品推荐

