依赖属性GetValue在不同的类
本文关键字:属性 GetValue 依赖 | 更新日期: 2023-09-27 18:01:53
所以我有一些问题得到我的依赖属性工作。但实际上只有当我试图从另一个类访问它们时。
例如,我正在检查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"));
}
}
现在我想从依赖属性的值在一个不同的类(特别是一个用户控件)。因此,我有另一个类,我试图获得这样的值:
public void MethodInClass2()
{
bool ping = (bool)GetValue(MainWindow.PingStateProperty);
我哪里做错了?让我烦恼的是:当我在同一个类中调用GetValue时,它正在工作。它没有给我一个编译错误或类似的东西,它似乎只是没有传递正确的值(在类1中定义了DP,我可以检查值并按预期获得"真",但当试图在类2中做同样的事情时,我每次都得到"假")。
在这种情况下我需要一个附加属性吗?我也试了一下,但不幸的是没有效果。
问候
除非您之前设置过该值,否则无法获得该值。只有当目标对象是相同类型或派生类型时,您才能设置该值,除非它是附加属性。像这样调用GetValue
不是从主窗口获取属性,它从当前实例(您的用户控件)获取属性。
永远不要在CLR包装器(public bool PingState
)中放置额外的代码。它不会被绑定系统调用,也不会在正确访问属性时被调用。要获取属性更改回调,请在属性注册时使用元数据。
如果需要属性的值,则需要保存该值的实例,如前面的注释和回答所述。使用setter/singleton或任何适合你的方法获取实例。依赖/附加属性不能解决你的问题。(如果你想绑定到属性,使用依赖属性)
感谢@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;