[英]How to programmatically specify one-way binding in C#?
简单的 C# 问题,但我一直找不到答案,尽管搜索了很多。 (我想我知道它在 WPF XAML 文件中是如何工作的,但我正在使用 WinForms 并以编程方式绑定)。 这一定很简单。 我如何告诉它单向绑定?
在这种情况下,chkUnchkAllChkBx 是一个复选框。 如果选中某个面板中的所有复选框,则 AllCheckBoxesChecked 为 boolean = true。 (事先不知道面板的内容)。
-阿拉姆
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));
}
}
}
WPF 的 BindingMode 的 WinForms 中没有等效项。 所以让我们澄清一下这个问题。 只有当 AllCheckBoxesChecked.AllChecked 的值通过更改绑定的 CheckBox chkUnchkAllChkBx 的值而更改时,才会出现问题,在应用程序中会产生不受欢迎的效果,例如“某些”面板中所有 CheckBox 的值将被更改为与 chkUnchkAllChkBx 相同的值。
假设您确实遇到了这些问题,您只需要确保使用绑定 class AllCheckBoxesChecked 的方式不会导致问题。 根据您的应用程序,一种可能有效的简单方法是使 AllCheckBoxesChecked.AllChecked 成为仅获取属性,其支持字段的值由方法设置。 像这样的东西:
public bool AllChecked
{
get { return _allChecked; }
}
public void SetAllChecked(bool value)
{
_allChecked = value;
OnPropertyChanged("AllChecked");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.