gpt4 book ai didi

.net - 在 WPF 和 Silverlight 中的静态属性上实现 INotifyProperty 更改

转载 作者:行者123 更新时间:2023-12-04 22:38:11 25 4
gpt4 key购买 nike

问题是如何实现INotifyPropertyChanged在静态属性上,因为您实现的事件不是静态的,并且不能由静态属性调用。此外,您不能绑定(bind)到 Silverlight 中的静态属性。

我已经看到这个问题出现在几个论坛中,提供了各种解决方案,但没有一个非常令人满意。

好吧,我想我找到了一个优雅的解决方案,但它太简单了,我觉得我一定错过了一些东西。

答案是,编写一个访问静态变量的非静态属性,如下所示:

    private static double length;
public double Length
{
get
{
return length;
}
set
{
length = value;
NotifyPropertyChanged("Length");
}
}

我已经对其进行了测试,它似乎工作得很好。我错过了什么吗?

最佳答案

从技术上讲,您仍然没有绑定(bind)到静态属性 - 您正在绑定(bind)到类的实例,该实例使用静态字段作为后备存储。这在某种程度上会起作用,但是...

这有一个基本问题 - 如果您有多个项目绑定(bind)到同一个后备存储(这似乎是您正在尝试的事情,因为您故意将其设为静态),INotifyPropertyChanged通知只会在您当前绑定(bind)的实例上发生。

例如,假设您有两个并排放置的 UserControl,它们都绑定(bind)到包含此代码的 ViewModel。当控件 A 设置此属性时,控件 B 将永远不会收到通知(因为运行的是 A 的 INotifyPropertyChanged),因此它会显得不同步。

如果你真的想尝试做这样的事情,你最好让你的后备存储使用一个实现 INotifyPropertyChanged 的​​类,并通过你的 ViewModel 类“冒泡”属性。这样,多个实例都将得到正确通知,并且您可以处理必要时可能发生的任何多线程/同步问题。

或者,您可能需要考虑在 Singleton 内部使用单个实例属性(带有实例字段)。 .这也将为您提供“静态”属性的共享通知。

关于.net - 在 WPF 和 Silverlight 中的静态属性上实现 INotifyProperty 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925696/

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