簡體   English   中英

Winforms MVVM數據綁定

[英]Winforms MVVM Databinding

我正在嘗試使用Winforms創建對MVVM的簡單模仿。 我已經創建了從ViewModel到Form的綁定,如下所示:

public class FirstViewModel : ViewModel
{
    private string _name;

    [Bind(nameof(TextBox.Text), "ExampleTextBox", typeof(ExampleConverter))]
    public string Name
    {
        get => _name;
        set
        {
            _name = value;
            RaisePropertyChanged();
        }
    }

    public FirstViewModel()
    {
        Test();
    }

    private async void Test()
    {
        await Task.Delay(TimeSpan.FromSeconds(1));

        Name = "Binding working...";
    }
}

在上面的示例中,我在ViewModel類內部調用相關的Form,然后查找具有給定名稱的控件並設置值。

我想知道如何在將返回值返回到屬性的情況下像“通用”那樣執行此操作。

解決方案可能是偵聽給定“ ExampleTextBox”的TextChanged事件,但這不是最佳解決方案,因為我必須知道Text屬性是通過此控件中的OnTextChanged事件實現的。

也許可以偵聽Text屬性的更改,並且哪個事件處理程序會提出該問題並不重要,或者我可能走錯了方向? 有人面對嗎?

提前致謝。

我在WinForms中完成此操作的方法是在表單本身內部添加數據綁定:

textBox1.DataBindings.Add("Text", _viewModel, "PropertyName");

您可以使用多種技術來避免魔術弦。

我還將在模型中實現INotifyPropertyChanged接口:

public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

暫無
暫無

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

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