全局范围附加依赖属性

mic*_*rus 5 c# wpf dependency-properties mvvm

我想在普通编程中做一些类似静态变量的事情,只能在使用依赖属性的 XAML 中。

这意味着我希望该物业:

  • 成为一个实例
  • 每个元素都可见
  • 可绑定

我怎么做 ?

nmc*_*ean 5

听起来您想要一个始终适用于每个元素的附加属性。我认为最简单的方法是通过依赖属性的CoerceValueCallback,在那里你可以强制它总是返回静态值而不管元素的本地值(你将更新PropertyChangedCallback 中的静态值)。

不过,这似乎是使用依赖属性系统的一种奇怪方式。也许您只需要一个中央绑定源?您可以通过分配Binding.Source使用绑定到静态实例x:Static

{Binding Source={x:Static Member=global:GlobalObject.SharedInstance},
         Path=SharedValue}
Run Code Online (Sandbox Code Playgroud)

请注意,这SharedValue不是静态属性;它是从静态SharedInstance属性访问的实例的属性:

public class GlobalObject {
    private static readonly GlobalObject _instance = new GlobalObject();

    public static GlobalObject SharedInstance { get { return _instance; } }

    public object SharedValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)