我希望两个人在DepedencyProperty
之间共享一个AddOwner
(欢迎任何其他方法),例如
class ClassA : DependencyObject
{
public int Number
{
get { return (int)GetValue(NumberProperty); }
set { SetValue(NumberProperty, value); }
}
public static readonly DependencyProperty NumberProperty =
DependencyProperty.Register("Number", typeof(int), typeof(ClassA),
new FrameworkPropertyMetadata(0,
FrameworkPropertyMetadataOptions.Inherits));
}
和
class ClassB : DependencyObject
{
public int Number
{
get { return (int)GetValue(NumberProperty); }
set { SetValue(NumberProperty, value); }
}
public static readonly DependencyProperty NumberProperty =
ClassA.NumberProperty.AddOwner(typeof(ClassB),
new FrameworkPropertyMetadata(0,
FrameworkPropertyMetadataOptions.Inherits));
}
如描述here。正如你可能猜到的那样:当然它不起作用。这是完全合理的,因为它将无法创建具有“自己的”依赖属性的同一个类的多个实例。
如何确保ClassA
,ClassB
的所有类(尤其是所有实例)以及任何其他引用的类该物业正在谈论完全相同的财产(因此价值)? Class A
不可选,因为MainWindow
是Class B
而UserControl
是{{1}}(因此无法保护构造函数)。
此致 本
答案 0 :(得分:4)
我认为你误解了DependencyProperties的目的。
它们基本上是属性定义,没有属性 Value 。
它们定义名称,类型,默认值,值的位置等内容,但它们本身不包含实际值。这允许为值提供指向任何其他位置中任何其他属性的绑定。
最好的办法是创建一个由单身人士属性支持的属性。
public int Number
{
get { return MySingleton.Number; }
set { MySingleton.Number = value; }
}
修改强>
根据下面的评论,你说你希望对象的所有实例都响应来自任何其他对象的更改通知,你需要在你的单例对象上实现INotifyPropertyChanged,并订阅它{每个使用该值的类中的{1}}事件。
例如,
PropertyChange
答案 1 :(得分:0)
您想要的一个可能的解决方案是使用另一个存储它的类 值。 e.g。
public class SomeValueStore : IValueStore
{
int myValue {get; set;}
}
然后,无论您需要该值,都可以使用依赖注入来获取它。
Bootstrapper的某个地方:
RootContainer.Register<IValueStore>(new SomeValueStore);
并在代码中:
var valueStore = RootContainer.Resolve<IValueStore();
valueStore.myValue = 42;
这只是一个想法(我知道我们在这里有一个ServiceLocator)。
也许你可以在你所在的地方存储对ValueStore的引用 可以从两个类中获得它作为一个简单的解决方案。
public SomeClassYouHaveAccessToFromBothSides
{
public IValueStore _store = new SomeValueStore();
}
请原谅。我现在无法访问我的repo / visual studio 所以我不能给出更好的例子。但我认为潜在的想法是明确的。