假设我有以下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对象和花括号更自然。我也遵循概念分离。 你觉得怎么样?
答案 0 :(得分:2)
你只是在做其他方式。
有multiple ways of extending a class
。其中两个是 -
在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
以便不同的开发人员可以同时处理它。