gpt4 book ai didi

wpf - 绑定(bind)静态属性并实现 INotifyPropertyChanged

转载 作者:行者123 更新时间:2023-12-04 22:16:19 27 4
gpt4 key购买 nike

我正在尝试将某个类的静态属性绑定(bind)到某个控件。我已经尝试了一些实现,但每个都有其问题:

所有示例都使用下一个 XAML:

 <Label Name="label1" Content="{Binding Path=text}"/>  

第一种方法 - 不要使用 INotifyPropertyChanged
public class foo1
{
public static string text { get; set; }
}

问题是,当“文本”属性更改时,不会通知控件。

第二种方法 - 使用 INotifyPropertyChanged
public class foo1 : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

private static string _text;
public static string text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged("text");
}
}
}

这不会编译,因为 OnPropertyChanged() 方法不是静态的,它是在静态方法中调用的。

第二种方法尝试 2:使 OnPropertyChanged() 方法静态 => 这不会编译,因为 OnPropertyChanged() 现在是静态的,并且它尝试使用非静态的 'PropertyChanged' 事件。

第二种方法尝试3:使'PropertyChanged'事件静态=>这不会编译,因为该类没有实现'INotifyPropertyChanged.PropertyChanged'事件(在'INotifyPropertyChanged接口(interface)中定义的事件不是静态的,但在这里它是静态的)。

这时我放弃了。

有任何想法吗?

最佳答案

我建议你只用一个实例属性返回你的静态属性,如下所示:

private static string _text;
public string text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged("text");
}
}

然而,这使得整个绑定(bind)相对毫无意义,因为更改通知仅在类的一个实例中创建,而不是在每个实例中创建。因此,只有绑定(bind)到更改它的特定实例上的属性的绑定(bind)才会更新。

更好的方法是使用单例,如 here 所示。 .

关于wpf - 绑定(bind)静态属性并实现 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com