简单的C#问题,但我一直找不到答案,尽管我搜索了很多。(我想我知道它在WPF XAML文件中是如何工作的,但我正在以编程方式使用WinForms和绑定(。这一定很简单。我该如何告诉它单向绑定?
在这种情况下,chkUnchkAllChkBx是一个复选框。如果选中了某个面板中的所有复选框,则AllCheckBoxesChecked为boolean=true。(事先不知道面板的内容(。
-Aram
public AllCheckBoxesChecked panelCheckBoxesChecked = new AllCheckBoxesChecked();
chkUnchkAllChkBx.DataBindings.Add("Checked",panelCheckBoxesChecked,"AllChecked");
public class AllCheckBoxesChecked : INotifyPropertyChanged
{ private bool _allChecked;
public AllCheckBoxesChecked()
{
_allChecked = false;
}
public bool AllChecked
{
get { return _allChecked; }
set
{
_allChecked = value;
OnPropertyChanged("AllChecked");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
}
在WinForms中没有等价的WPF的BindingMode。因此,让我们澄清一下这个问题。只有当检查了AllCheckBoxesChecked的值时,才会出现问题。AllChecked是通过更改绑定复选框chkUnchkAllChkBx的值来更改的,在应用程序中会产生不受欢迎的影响,例如"特定"面板中所有复选框的值都将更改为与chkUnshkAllChk Bx相同的值。
假设您在这些方面确实有问题,您只需要确保绑定类AllCheckBoxesChecked的使用方式不会造成问题。根据您的应用程序,一种可能有效的简单方法是对AllCheckBoxesChecked进行检查。AllChecked是一个get-only属性,其支持字段的值由一个方法设置。类似这样的东西:
public bool AllChecked
{
get { return _allChecked; }
}
public void SetAllChecked(bool value)
{
_allChecked = value;
OnPropertyChanged("AllChecked");
}