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焕发新春

Winforms 中的数据绑定

WPF MVVM - 如何绑定自定义控件->ToggleButton.IsChecked 到 View->TextBox.Text

Winforms DataGridView 数据绑定到复杂类型/嵌套属性

数据绑定库和MVVM

绑定数据更改时Winforms列表框不更新