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