如果属性位于单例实例中,则将两个UIElements绑定到同一属性将无法正常工作

时间:2012-06-19 18:44:09

标签: c# xaml binding uielement

我从未遇到过这个问题,但最近我注意到,如果属性位于Singleton中,则对属性的双向绑定不起作用。

我的意思是'其他'CheckBox永远不会更新其值。

有关如何使其发挥作用的任何想法? 提前谢谢!

Singleton.cs

public class Singleton : INotifyPropertyChanged
{
    private bool panelClosed;

    static Singleton()
    {
        Instance = new Singleton();
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public static Singleton Instance { get; private set; }

    public bool PanelClosed
    {
        get
        {
            return this.panelClosed;
        }

        set
        {
            this.panelClosed = value;
            this.NotifyPropertyChanged("PanelClosed");
        }
    }

    private void NotifyPropertyChanged(string info)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(null, new PropertyChangedEventArgs(info));
        }
    }
}

XAML:

<CheckBox 
    Content="Check/Uncheck me" 
    Height="16" Name="checkBox1" 
    IsChecked="{Binding Source={x:Static local:Singleton.Instance}, Path=PanelClosed, 
                UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>

<CheckBox 
    Content="Sanity Check" 
    Height="16" Name="checkBox2" 
    IsChecked="{Binding Source={x:Static local:Singleton.Instance}, Path=PanelClosed, 
                UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

2 个答案:

答案 0 :(得分:0)

这让我感到困惑,但这是一个简单的修复。使用单身人士没有问题。

更改

this.PropertyChanged(null, new PropertyChangedEventArgs(info));

this.PropertyChanged(this, new PropertyChangedEventArgs(info));

答案 1 :(得分:0)

我已经查看了您的代码并将其实现到我自己的项目中,但不幸的是它没有按预期工作。 PropertyChangedEventHandler始终为null,并且不会在任何地方设置。

您是否拥有代码的副本,以便我可以查看它并查看我出错的地方?