如何绑定到Silverlight 4中的单例属性?

嗨所有的第一篇文章在这里:)让我们从我正在使用的代码片段开始:

public MyClass : INotifyPropertyChanged { private static MyClass _instance; public static MyClass Instance { get { if (_instance == null) _instance = new MyClass(); return _instance; } } private bool _myProperty; public bool MyProperty { get { return _myProperty; } set { if (_myProperty!= value) { _myProperty= value; NotifyPropertyChanged("MyProperty"); } } } private MyClass() { ... } } 

如你所见,它是一个单身人士类。 在我看来,我想在MyProperty上绑定一个控件。 我最初的想法是在我的视图中使用以下内容将MyClass导入为静态资源:

      

然后像这样绑定它:

 

当然,这种方法不起作用,因为MyClass构造函数是私有的。 我也不能使用x:static,因为它在Silverlight 4中不可用。

我一直坚持这个问题的时间远远超过我应该拥有的……我如何在MyProperty上绑定?

有任何想法吗?

提前致谢!

你可以让你的UserControl在内部通过它自己的属性公开MyClass实例,并在本地绑定它自己的“MyClass”实例。 因为它是一个Singleton,所以它将始终是同一个实例。

我建议添加额外的类MyClassProvider

 public class MyClassProvider { public MyClass MyClass { get { return MyClass.Instance; } } } 

您可以将此类放在任何位置并绑定到其MyClass属性的实例。

您可以稍微不同地实现单例,如下所示:

  private static MyClass _instance; public MyClass Instance // note the getter is not static { get { if (_instance == null) _instance = new MyClass(); return _instance; } } 

所以现在你可以在xaml中执行以下操作:

     

并像这样绑定它:

  

注意单例仍然是一个单例,但是我们只是通过不将getter设置为static来绕过Silverlight缺少的静态。

我已经validation以下是在Silverlight 5中工作:

保持你的类MyClass不变,然后在你的业务UserControl类中创建一个名为MyClass属性:

 public MyClass MyClass { get { return .MyClass.Instance; } } 

然后在你的业务UserControl XAML中,做这样的绑定:

  

一旦你的应用程序中的某个地方, MyClass.Instance.MyProperty (这里是MyClass是类名)改变了MyProperty的值,上面的绑定将被更新。