silverlight - 将代码保留在 XAML 代码之外的真正优势是什么?

标签 silverlight mvvm icommand

Silverlight 社区为使 XAML 的代码隐藏在文件中尽可能地无代码而付出了很多努力。这背后的真正动机是什么?

例如,使用命令而不是事件处理程序有什么好处?如果我有

<Button x:Name="SaveButton" Content="Save" Click="SaveButton_Click" />

...

private void SaveButton_Click(object sender, RoutedEventArgs e) {
    _myViewModel.SaveChanges();
}

那为什么首选这个?
<Button x:Name="SaveButton" Content="Save" Command="{Binding SaveCommand}" />

显然 SaveCommand在我看来,模型实际上会调用 SaveChanges() .

这可能导致 View 是 100% XAML 的情况,甚至在 XAML 中实例化 View 模型,并且 View 和 View 模型之间的连接完全通过绑定(bind)完成。当然它很干净,但还有什么?灵活的?为什么? View 仍然需要使用正确的 ViewModel,所以如果两者之间的联系存在并且是隐式的,为什么不让它更明确呢?它还具有失去编译时支持的缺点。如果我将按钮连接到不存在的事件处理程序,编译器会告诉我。如果我绑定(bind)到一个不存在的命令,它不会。

最佳答案

There is a lot of effort in the Silverlight community to keep a XAML's code behind file as free of code as possible. What is the real motivation behind this?



我想说那些想要“尽可能无代码”背后的代码的人是那些在没有真正理解重点的情况下跳上 MVVM 潮流的人。 (或者你误解了他们的观点)。

关键不是要让代码隐藏没有代码,而是要确保 View 只负责视觉呈现。可以以声明方式定义许多视觉方面的事实意味着代码隐藏中的代码更少,但这并不意味着您应该犹豫在您认为有必要的地方编写代码隐藏并且不会超出 View 的职责范围。

what is the advantage of using a command instead of an event handler?



命令至少提供了两个事件处理程序没有的功能。一些 WPF 控件知道 Command 的 CanExecute 属性,例如,当命令不可执行时,可以禁用按钮。设计器和绑定(bind)框架也是命令感知的。

如果您只想在按钮按下时调用方法,那么使用命令而不是仅从事件处理程序调用方法并没有太大的优势。所以不要害怕使用这种方法。 (第三种有利于设计师而不是程序员的方法是使用 Blend 4 中的 CallMethodAction)。

关于silverlight - 将代码保留在 XAML 代码之外的真正优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345124/

相关文章:

c# - Silverlight DataGrid 如何从选定项中获取单元格值?

silverlight - WP7 : can't get img from httpget url using webclient. OpenReadAsync

c# - 从 ViewModel 向 View 发送命令是否违反了 MVVM?

extjs 数据绑定(bind) ViewModel 和网格不起作用

c# - 如何使用 JSON.NET 的 JsonTextReader 异步读取 NetworkStream?

silverlight - 如何在 Silverlight 中验证主机服务器的证书?

c# - 有什么理由我不应该在彼此之上使用两个 ContentPresenters 来模拟弹出窗口?

c# - MVVM 从其他 ViewModel 在 ViewModel 上执行命令

c# - 如何从 xamarin 表单中的绑定(bind)命令调用函数

wpf - 单元测试 MVVM 命令