【问题标题】:WPF - Data BindingWPF - 数据绑定
【发布时间】:2017-01-10 00:05:54
【问题描述】:

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

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

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

【问题讨论】:

  • 因为当您可以将“模型”代码与 UI 代码分开时,一切都会减少很多。当我在多年的 MFC 和 winforms 之后第一次看到它时,这对我来说是显而易见的。我唱哈利路亚。这样的解脱。
  • @EdPlunkett 我完全同意将业务模型与 UI 代码分开,但无论如何我们都在更新视图模型。我其实理解一次性绑定的好处,也就是在页面初始化阶段绑定视图模型。但是在更新视图时,我无法理解更改视图模型而不是视图本身的好处。
  • 许多非常有经验和非常聪明的专业人士都看到了它的深刻价值。当然,LISP 也是如此——但这就是为什么我不讨论 LISP 的价值的原因。如果我有时间学习它,我可能会看到它们的价值。不过,我在 tcl 画了一条线。呃。
  • 为什么这么多反对票..这个问题似乎很合理。

标签: wpf mvvm


【解决方案1】:

你想要像这样的代码

view.xaml

 <TextBox x:Name="txtName"/>

view.xaml.cs

  txtName.Text = "Bob";
  MyServiceCall(txtName.Text);

这很好,但我不喜欢它。

我更喜欢 MVVM:(我不关心我的视图模型中的视图)

view.xaml

 <TextBox Text="{Binding Name}"/>

视图模型

  Name = "Bob";

  MyServiceCall(Name);

【讨论】:

    【解决方案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. 可维护性
    2. 可读性
    3. 可重用性
    4. 更好的可测试性
    5. 良好的关注点分离
    6. 减少代码重复
    7. 双向数据绑定

    【讨论】:

    • 我其实明白一次性绑定的好处,也就是在页面初始化阶段绑定数据。但是在更新视图时,我无法理解更改视图模型而不是视图本身的好处。
    • 这就是我在回答中试图解释的。你读过它吗?可以更新小型应用程序/单页应用程序的视图。如果您想在文本框中输入文本或任何此类情况时同步更新服务或数据库,2 路绑定将非常方便。如果您没有关注 MVVM,那么您希望跟踪文本更改事件,然后更新数据库或服务,其中可能包含许多额外的代码行。但在 MVVM 中,它会非常整洁干净。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2015-05-24
    • 2015-06-23
    • 2012-12-28
    • 2015-11-23
    • 2011-01-01
    • 2010-11-04
    相关资源
    最近更新 更多