不同类

时间:2016-08-11 16:22:24

标签: c# wpf dependency-properties getvalue

所以我在让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课中做同样的事我每次都只是“假”。

在这种情况下,我是否需要附属物?他们也尝试了一下,但遗憾的是无济于事。

问候

3 个答案:

答案 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;