所以我在让Depency Properties工作时遇到了一些问题。但事实上,只有当我试图从不同的班级访问它们时。
例如,我正在检查ping服务器并定义相应的依赖项属性:
public static DependencyProperty PingStateProperty =
DependencyProperty.Register("PingState", typeof(bool),
typeof(MainWindow));
public bool PingState
{
get { return (bool)GetValue(PingStateProperty); }
set
{
SetValue(PingStateProperty, value);
PropertyChanged(this, new PropertyChangedEventArgs("PingState"));
}
}
现在我想从不同的类(特别是用户控件)中获取Dependency Property的值。所以我有另一个课,我试图得到这样的价值:
public void MethodInClass2()
{
bool ping = (bool)GetValue(MainWindow.PingStateProperty);
我在这里做错了什么?让我烦恼的是:当我在同一个类中调用GetValue时,它正在工作。它没有给我一个编译错误或类似的东西,它似乎只是没有传递正确的值(在定义DP的类1中,我可以检查值并按预期获得“true”但是在尝试时在第2课中做同样的事我每次都只是“假”。
在这种情况下,我是否需要附属物?他们也尝试了一下,但遗憾的是无济于事。
问候
答案 0 :(得分:0)
除非您之前已设置过,否则无法获取该值。如果目标对象属于同一类型或派生对象,则只能设置该值,除非它是附加属性。像这样调用GetValue
不从主窗口获取属性,它从当前实例(您的用户控件)获取属性。
从不在CLR包装器中放置其他代码(public bool PingState
)。当绑定系统没有正确访问属性时,它不会被调用。要获取属性更改回调,请使用metadata上的property registration。
答案 1 :(得分:0)
如果您想要属性的值,则需要保存该值的实例,如前面的注释和答案中所述。使用setter / singleton或任何适合您的实例获取实例。依赖/附加属性不会解决您的问题。 (如果您希望绑定到该属性,请使用依赖项属性。)
答案 2 :(得分:-1)
感谢@aQsu,我能够以不同的方式对此进行排序。我现在正在使用Singleton来获取如下所示的实例:
private static MainWindow _instance;
public static MainWindow Instance
{
get
{
if (_instance == null)
_instance = new MainWindow();
return _instance;
}
}
然后只需调用UserControl
bool ping = MainWindow.Instance.PingState;