WPF 如何将复选框双向链接到类成员和另一个静态变量
本文关键字:成员 另一个 变量 静态 链接 复选框 WPF | 更新日期: 2023-09-27 18:30:19
我有一个复选框,它绑定到 xaml 代码中的类变量:
<CheckBox x:Name="cbxUseBubbleNotifications" Margin="20" IsChecked="{Binding Path=pcdLoggerData.UseBubbleNotifications, Mode=TwoWay}" Content="_Use bubble notifications" HorizontalAlignment="Left" VerticalAlignment="Top" Style="{DynamicResource CheckboxSwitchStyle}" />
这应该应该是双向绑定,但发生的情况是:
- 复选框设置为 CHECKED ----> var pcdLoggerData.UseBubbleNotifications 自动确定
- 该类被序列化(通过数据合约序列化,但我认为这不会改变任何东西)。
- 我重新启动程序,因此pcdLoggerData.UseBubbleNotifications自动设置为true4 复选框未设置为 TRUE <-----错误
第 4 点不正确:因为我希望以两种方式自动执行此操作。
我的班级是:
[DataContract]
public class PCDLoggerBinSerializableData
{
public PCDLoggerBinSerializableData() { }
public PCDLoggerBinSerializableData(string _languageInUse, bool _useBubbleNotifications)
{
LanguageInUse = _languageInUse;
UseBubbleNotifications = _useBubbleNotifications;
}
[DataMember]
public string LanguageInUse { get; set; }
[DataMember]
public bool UseBubbleNotifications { get; set; }
}
}
更重要的是,我必须根据pcdLogger.UseBubbleNotifications的相同值/变体设置另一个变量,这是一个静态变量。类似于 Bubble.NoBubbles = !pcdmisData.UseBubbleNotifications
所以有两个问题:
- 数据绑定不是双向工作(只有单向)
- 如何数据绑定另一个静态变量?
谢谢
--加--
不工作,我在类的所有部分都放置了断点,但它们从来没有。
我是这样做的:
[DataContract]
public class PCDLoggerBinSerializableData: INotifyPropertyChanged
{
#region CONSTRUCTORS
public PCDLoggerBinSerializableData() { }
public PCDLoggerBinSerializableData(string _languageInUse, bool _useBubbleNotifications)
{
LanguageInUse = _languageInUse;
UseBubbleNotifications = _useBubbleNotifications;
}
#endregion
#region OPTIONS
[DataMember]
public string LanguageInUse { get; set; }
[DataMember]
private bool useBubbleNotifications;
public bool UseBubbleNotifications
{
get { return useBubbleNotifications; }
set
{
useBubbleNotifications = value;
Bubble.NoBubblesPlease = !useBubbleNotifications;
OnPropertyChange("UseBubbleNotifications");
}
}
#endregion
#region NOTIFIER
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChange(string inName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("inName"));
}
#endregion
}
它会像这样:
public bool UseBubbleNotifications
{
get
{
return useBubbleNotifications;
}
set
{
useBubbleNotifications = value;
Other_Static_Variable = value;
OnPropertyChange("UseBubbleNotifications");
}
}
public void OnPropertyChange(string inName)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("inName"));
}
}
这样的事情可能会起作用。当然,您的类必须继承 INotifyPropertyChanged 接口。