依赖属性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在不同的类

除非您之前设置过该值,否则无法获得该值。只有当目标对象是相同类型或派生类型时,您才能设置该值,除非它是附加属性。像这样调用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;