Winforms MVVM数据绑定

时间:2018-02-28 22:03:39

标签: c# 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然后查找具有给定名称的控件并设置值。

我想知道我怎么能这样做' generic'因为返回值返回财产。

解决方案可能是为给定的" ExampleTextBox"监听TextChanged事件。但这不是最佳解决方案,因为我必须知道Text属性是在此控件中使用OnTextChanged事件进行的。

也许有可能听到Text属性发生变化,无论哪一个事件处理程序会引发这个问题,或者我可能会走向错误的方向? somone面对那个吗?

提前致谢。

1 个答案:

答案 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));
        }