C# 如何实现INPC以引用静态属性?
有一个静态配置类:C# 如何实现INPC以引用静态属性?,c#,wpf,mvvm,C#,Wpf,Mvvm,有一个静态配置类: public class Cfg : PropertyChangedBase { private static string _niceString; public static string NiceString { get => _niceString; set { _niceString = value; NotifyStaticPropertyChanged("Ni
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));
}
}
所以(类使用KindOfMagic实现INPC,这很有效)并像这样实现绑定:`Content=“{binding MyBestString}”,那么什么都不起作用
为什么??如何让它工作
另外,不可能使用这样的绑定
Content=“{binding Path=(local:Сfg.Nice)}”
-我需要在将值显示在元素中之前处理它们。没有理由原始属性也不能为MyBestString
提供通知更改事件
将代码更改为:
public static string NiceString {
get => _niceString;
set {
_niceString = value;
NotifyStaticPropertyChanged("NiceString");
NotifyStaticPropertyChanged("MyBestString");
}
}
每当
MyBestString
的值更改时,VM必须引发PropertyChanged。绑定无法猜测它应该在某个地方找到这个静态对象;它只知道你给了它什么。因此,让您的viewmodel向Cfg.PropertyChanged
添加一个处理程序,并让处理程序调用OnPropertyChanged(nameof(MyBestString))
每当Cfg
为Nice
发出更改通知时,“我需要在将值显示在元素中之前对其进行处理。”--听起来像是一个值转换器。自己写答案?以转换器为代价-我不喜欢在每一步都编写它们,对我来说更改get
public static string NiceString {
get => _niceString;
set {
_niceString = value;
NotifyStaticPropertyChanged("NiceString");
NotifyStaticPropertyChanged("MyBestString");
}
}