如何实现用于引用静态属性的INPC?

时间:2019-06-28 16:50:54

标签: c# wpf mvvm

有一个静态配置类:

public class Cfg : PropertyChangedBase
{
    private static string _niceString;

    public static string NiceString {
        get => _niceString;
        set {
            _niceString = value;
            NotifyStaticPropertyChanged("NiceString");
        }
    }

    public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
    private static void NotifyStaticPropertyChanged(string propertyName) {
        StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
    }
}

如果我们进行如下绑定:Content="{Binding Path=(local:Сfg.Nice)}"一切正常。

但是,如果我在VM中设置以下属性:

 public string MyBestString => Cfg.NiceString;

因此(类使用KindOfMagic实现INPC,该方法有效)并实现如下所示的绑定:`Content =“ {Binding MyBestString}”,那么将无济于事。

为什么?以及如何使其工作?


P.S。使用这样的绑定Content =" {Binding Path = (local: Сfg.Nice)} "几乎是不可能的-我需要先处理这些值,然后才能在元素中显示它们。

1 个答案:

答案 0 :(得分:1)

没有理由也无法为MyBestString提供原始属性的通知更改事件。

将您的代码更改为:

   public static string NiceString {
        get => _niceString;
        set {
            _niceString = value;
            NotifyStaticPropertyChanged("NiceString");
            NotifyStaticPropertyChanged("MyBestString");
        }
    }