簡體   English   中英

如何將Winform文本框綁定到類屬性?

[英]How can I bind a Winform textbox to a class property?

我已經在Stack Overflow和其他地方閱讀了許多問題,這些問題描述了如何將文本框綁定到類,但是在編譯時如果沒有收到VS的錯誤,我似乎甚至無法使基礎工作。

(1)我要完成的是顯示一個類的屬性的文本。

(2)當用戶修改該文本時,我希望該屬性自動更新。

不幸的是,我什至無法超越(1)。

班級:

class BookProperties : INotifyPropertyChanged
{

    private string _bookTitle;
    public string bookTitle { get { return _bookTitle; } set { SetField(ref _bookTitle, value, "bookTitle"); } }

    #region handle property changes

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    protected bool SetField<T>(ref T field, T value, string propertyName)
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        OnPropertyChanged(propertyName);
        return true;
    }

    #endregion
}

類的初始化器:

BindingList<BookProperties> bookProperty = new BindingList<BookProperties>();

與文本框的連接:

    textBox1.DataBindings.Clear();
    textBox1.DataBindings.Add("Text", bookProperty, "bookProperty.bookTitle");

我也嘗試過這個:

    textBox1.DataBindings.Clear();
    textBox1.DataBindings.Add("Text", bookProperty, "bookProperty[0].bookTitle");

Visual Studio引發以下錯誤:

無法創建fieldbookProperty的子級列表。

開始編輯:嘗試這段代碼,我建議從第三個參數中刪除其他元素。

bookProperty.Add(new BookProperties(){bookTitle="C#"});
textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle");

現在,我收到此錯誤。 我以前收到過它,正在尋找解決方案,但認為對我來說太籠統了,無法弄清楚我到底在做什么錯。

System.Windows.Forms.dll中發生了類型為'System.ArgumentException'的未處理異常

附加信息:這將導致集合中的兩個綁定綁定到同一屬性。

結束編輯

我開始認為我的方法存在根本上的錯誤,因為我已經看到人們說的類似代碼有效,所以我希望有人可以告訴我我做錯了什么。 請注意,這是Windows窗體問題,而不是XAML。 謝謝。

已修正對不起,最后一次編輯。 事實證明,我以前曾嘗試使用VS設計器將文本框手動鏈接到數據源。 刪除該數據源后,一切正常。 感謝您的幫助!

嘗試這個:

bookProperty.Add(new BookProperties(){bookTitle="C#"});
textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle");

第二個參數是應該顯示的源,第三個參數是源類的屬性。 還要確保bookProperty列表中有項目。

希望會有所幫助。

確保您正在捕獲更改:

textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle", true, DataSourceUpdateMode.OnPropertyChanged);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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