You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:02