簡體   English   中英

如何以編程方式在 C# 中指定單向綁定?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM