我是WPF的新手。据我所知,数据绑定控件会在源数据更改时自动更新。为什么有人会通过数据更改UI而不是直接操作它?我的意思是,如果我想更改Label的文本,为什么我会选择直接更改其绑定数据而不是Text属性?
然后你可能会问为什么我首先将它绑定到数据源。但它似乎是唯一的解决方案,以便使用来自服务器的数据实例化XAML模板。这样,我不必在后面的代码中编写命令式代码来初始渲染视图。但是当我想要更新它时,无论如何我都必须通过代码来完成它,即使我使用数据绑定。
所以问题基本上是,为什么要更改视图模型而不是更改视图本身?
答案 0 :(得分:2)
您的问题可能是为什么我们应该使用MVVM和数据绑定。所以它就像问为什么不是TextBox.Text="HelloWorld"
而不是TextBox.Text="{Binding SomeViewModelProperty"
。
由于我从过去4年开始从事WPF / MVVM,我可以简单地告诉你答案。您在这里说的方法最适合小型单页面应用程序。假设您有一个包含3个文本框的单页应用程序。您需要从服务器获取文本框值。您要做的只是在视图中放置3个文本框。在xaml.cs后面的代码中你可以写,
TextBox1.Text = SomeServerCallOrDbCall.GetData1();
TextBox2.Text = SomeServerCallOrDbCall.GetData1();
TextBox3.Text = SomeServerCallOrDbCall.GetData1();
考虑一个大型应用程序。您需要在视图中显示100个字段。您需要从多个服务器和服务中获取数据。您需要在视图之间导航并在视图,服务或数据库之间交换数据。此时,这种所谓的数据绑定/ MVVM方法将有很大帮助。它将帮助您分离关注点。如果你在代码中写下所有这些代码(即xaml.cs),那么你的代码将变得很麻烦,你的代码可重用性,可读性和可维护性将非常差。如果您想要更改字段或测试应用程序的一部分,那么在非常庞大的代码中搜索代码行将非常困难。所以你使用MVVM。此外,许多人可以同时在一个项目中工作。当一个开发人员正在设计视图时,其他一些开发人员可以创建视图模型。这也使测试变得简单。此外,MVVM使您可以轻松实现TwoWay Binding
。因此,当您更改文本框文本时,它会在ViewModel属性中自动更新,而这又可用于更新数据库或服务中的数据。
因此,您可以遵循这种方法:
<TextBox x:Name="TextBox1" Text="{Binding ViewModelProperty1, Mode=TwoWay}" />
<TextBox x:Name="TextBox2" Text="{Binding ViewModelProperty2, Mode=TwoWay}" />
<TextBox x:Name="TextBox3" Text="{Binding ViewModelProperty3, Mode=TwoWay}" />
简介MVVM模型的好处:
- Maintanability
- 可读性
- 复用性
- 更好的可测试性
- 良好的关注分离
- 减少代码重复
- 双向数据绑定
醇>
答案 1 :(得分:0)
你想编码
view.xaml
<TextBox x:Name="txtName"/>
view.xaml.cs
txtName.Text = "Bob";
MyServiceCall(txtName.Text);
那很好,但我不喜欢它。
我更喜欢MVVM :(我不关心我的viewmodel中的视图)
view.xaml
<TextBox Text="{Binding Name}"/>
视图模型
Name = "Bob";
MyServiceCall(Name);