我正在尝试使用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然后查找具有给定名称的控件并设置值。
我想知道我怎么能这样做' generic'因为返回值返回财产。
解决方案可能是为给定的" ExampleTextBox"监听TextChanged事件。但这不是最佳解决方案,因为我必须知道Text属性是在此控件中使用OnTextChanged事件进行的。
也许有可能听到Text属性发生变化,无论哪一个事件处理程序会引发这个问题,或者我可能会走向错误的方向? somone面对那个吗?
提前致谢。
答案 0 :(得分:1)
我在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));
}