WPF - 数据绑定

时间:2016-09-02 00:47:50

标签: wpf mvvm

我是WPF的新手。据我所知,数据绑定控件会在源数据更改时自动更新。为什么有人会通过数据更改UI而不是直接操作它?我的意思是,如果我想更改Label的文本,为什么我会选择直接更改其绑定数据而不是Text属性?

然后你可能会问为什么我首先将它绑定到数据源。但它似乎是唯一的解决方案,以便使用来自服务器的数据实例化XAML模板。这样,我不必在后面的代码中编写命令式代码来初始渲染视图。但是当我想要更新它时,无论如何我都必须通过代码来完成它,即使我使用数据绑定。

所以问题基本上是,为什么要更改视图模型而不是更改视图本身?

2 个答案:

答案 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模型的好处:

  
      
  1. Maintanability
  2.   
  3. 可读性
  4.   
  5. 复用性
  6.   
  7. 更好的可测试性
  8.   
  9. 良好的关注分离
  10.   
  11. 减少代码重复
  12.   
  13. 双向数据绑定
  14.   

答案 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);
相关问题