Winforms MVVM数据绑定
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winforms MVVM数据绑定相关的知识,希望对你有一定的参考价值。
我正在尝试使用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属性发生变化,无论哪一个事件处理程序会引发这个问题,或者我可能会走向错误的方向? somone面对那个?
提前致谢。
答案
我在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));
}
以上是关于Winforms MVVM数据绑定的主要内容,如果未能解决你的问题,请参考以下文章
“老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
WPF MVVM - 如何绑定自定义控件->ToggleButton.IsChecked 到 View->TextBox.Text