そこで、アプリケーション全体でグローバルに使用されるToolTipイネーブラーを追跡するために使用するシングルトンを作成しましたが、それをToolTipにバインドしようとすると、最初は値がバインドされますが、ToolTipイネーブラーの値を変更すると、バインディングは更新されません。
これは、ツールチップへのバインドを作成するユーザーコントロールです。
public partial class ViewTreeClass : UserControl {
private void addStuff() {
EnvironmentalVariables.Instance.ToolTipEnable = true;
Binding bind = new Binding() {
Source = EnvironmentalVariables.Instance.ToolTipEnable,
};
ToolTip x = new ToolTip();
x.Content = "This is text";
user.SetBinding(ToolTipService.IsEnabledProperty, bind);
user.ToolTip = x;
EnvironmentalVariables.Instance.ToolTipEnable = false;
// Executing the above statement changes the variable, but ToolTipService.IsEnabledProperty does not change to reflect EnvironmentalVariables.Instance.ToolTipEnable
}
}
これは、INotifyPropertyChangedを実装するシングルトンです。
public class EnvironmentalVariables : INotifyPropertyChanged {
private static EnvironmentalVariables instance = new EnvironmentalVariables();
public static EnvironmentalVariables Instance {
get {
if(instance == null) {
instance = new EnvironmentalVariables();
}
return instance;
}
}
private EnvironmentalVariables() { }
private bool tooltipEnable;
public bool ToolTipEnable {
get {
return tooltipEnable;
}
set {
if(tooltipEnable != value) {
tooltipEnable = value;
this.RaiseNotifyPropertyChanged("ToolTipEnable");
}
}
}
private void RaiseNotifyPropertyChanged(string property) {
if(PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
'EnvironmentalVariables.Instance.ToolTipEnable=false;'を変更すると シングルトン変数を「false」に変更しますが、ToolTipService.EnabledPropertyを「false」に更新せず、PropertyChangedは常にnullです。PropertyChangedのサブスクリプションがどこかにありませんか?
シングルトンとUCは、どちらも異なる名前空間/クラスファイルにあります。