2

この問題に遭遇したことはありませんが、最近、プロパティがシングルトンに存在する場合、プロパティへの双方向バインディングが機能しないことに気付きました。

つまり、「その他」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}" />
4

2 に答える 2

0

これで少し混乱しましたが、簡単な修正です。シングルトンを使用しても問題ありません。

変化する

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

this.PropertyChanged(this, new PropertyChangedEventArgs(info));
于 2012-06-19T20:25:05.800 に答える
0

私はあなたのコードを見て、それを自分のプロジェクトに実装しましたが、残念ながら、意図したとおりに機能していません。PropertyChangedEventHandlerは常にnullであり、どこにも設定されません。

コードのコピーを持っているので、私はそれを見て、どこが間違っているのかを知ることができますか?

于 2012-07-02T15:04:57.743 に答える