如何绑定到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
的值,上面的绑定将被更新。