Here microsoft描述了在wpf 4.5中我们也可以将INotifypropertyChanged用于静态属性。所以我试着这样做。
以下是代码:
public static event PropertyChangedEventHandler StaticPropertyChanged;
protected static void OnStaticPropertyChanged(string PropertyName)
{
PropertyChangedEventHandler handler = StaticPropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(PropertyName));
}
}
但我不知道在上面的代码中使用什么代替this
关键字?
这是我的代码:
public static event PropertyChangedEventHandler StaticPropertyChanged;
protected static void OnStaticPropertyChanged(string PropertyName)
{
PropertyChangedEventHandler handler = StaticPropertyChanged;
if (handler != null)
{
handler(typeof(MainWindowViewModel), new PropertyChangedEventArgs(PropertyName));
}
}
private static Haemogram _cHaemogram;
public static Haemogram cHaemogram
{
get
{
return _cHaemogram;
}
set
{
_cHaemogram = value;
OnStaticPropertyChanged("cHaemogram");
}
}
答案 0 :(得分:7)
除非使用发送者参数,否则无关紧要。从逻辑上讲,使用类型是有意义的:
handler(typeof(TypeDeclaringEvent), new PropertyChangedEventArgs(PropertyName));
编辑:请注意,在您提到的文档中,它指出:
静态事件可以使用以下任一签名。
public static event EventHandler MyPropertyChanged; public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
您的活动不符合这些,这可能是一个问题。
答案 1 :(得分:0)
认为您已将此添加到您的viewmodel:
yourClass.StaticPropertyChanged+= yourClassStaticPropertyChanged;
...
void yourClassStaticPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
}
“this”关键字引用“object sender”参数。 如果在创建处理程序时在代码中使用“this”,则它会在yourClassStaticPropertyChanged函数中引用“sender”。如果发送null,则sender参数将为null。
- 编辑 -
如果您想要更改文本框,请将此代码添加到您的viewmodel:
private string _updatedText;
public string UpdatedText
{
get
{
return _updatedText;
}
set
{
_updatedText= value;
OnStaticPropertyChanged("UpdatedText")
}
}
并在事件中设置UpdatedText:
void yourClassStaticPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
UpdatedText=e.NewValue;
}
然后将UpdatedText绑定到您的文本框,如下所示:
<TextBlock Text="{Binding UpdatedText}"/>