带有扩展方法的WPF MVVM,没有DataBinding!为什么不?

时间:2013-11-10 12:29:28

标签: c# wpf xaml data-binding mvvm

假设我有以下XAML:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Canvas>
    <Button Content="Write something" Canvas.Left="43" Canvas.Top="159" Width="162" Height="42" Click="Button_Click_1"/>
</Canvas>

我的ViewModel可以是这个类,也可以包含它的一个实例(一个viewmodel逻辑):

 //Here is my static class for extension methods
 public static  class ExtendenWindowClass
{

  /// <summary>
  /// Eventhandler for Button
  /// </summary>
  /// <param name="obj"></param>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  public static void Button_Click_1(this MainWindow obj, object sender, RoutedEventArgs e)
  {

      MessageBox.Show("Wait 10 seconds");
      Thread.Sleep(10000);
      MessageBox.Show("Ready, now you can press again");
  }
}

所以whiring不再是代码背后,而是扩展方法。 MainWindow类的静态字段用法很少,因此可以跳过它。

xaml的外观比使用DataBinding对象和花括号更自然。我也遵循概念分离。   你觉得怎么样?

1 个答案:

答案 0 :(得分:2)

你只是在做其他方式。

multiple ways of extending a class。其中两个是 -

  1. 部分课程。
  2. 扩展方法。
  3. code behind中,您正在使用partial class实施扩展您的课程。

    public partial class MainWindow : Window { }
    

    在您发布的代码中,您使用其他方式即扩展方法实现了这一目标。我不这么认为你在这里得到更多东西。


    MVVM模式的主要动机是decouple UI logic from business logic。在后面的代码中使用扩展方法或代码也不能unit tested。窗口后面的代码和窗口上的扩展方法对我来说完全相同。您的View and ViewModel should work oblivious to each other以便不同的开发人员可以同时处理它。

    您可以阅读更多关于MVVM的herehere