“非侵入式代码隐藏”是一种好的还是坏的做法?

时间:2009-02-19 08:01:36

标签: xaml code-behind

我有点惊讶的是,在学习WPF / XAML / Silverlight时,我遇到的几乎所有XAML / C#示例都在XAML中有“Click”事件,在Window或Page构造函数中只有很少。

现在所有的重点都集中在“非侵入式Javascript”上,我认为更多的开发人员实际上会像这样构建他们的XAML /代码隐藏:

XAML:

<Grid>
    <Button x:Name="btnEdit"/>
</Grid>

代码背后:

public Window1()
{
    InitializeComponent();

    btnEdit.Content = "Edit";
    btnEdit.Click += new RoutedEventHandler(btnEdit_Click);
}

private void btnEdit_Click(object sender, RoutedEventArgs e)
{
    btnEdit.Content = "This button was clicked.";
}

有关为什么这会是一个好的或坏的做法的任何想法?

4 个答案:

答案 0 :(得分:6)

大多数较小的WPF示例仅仅给出了可能的印象,而没有关注设计问题或良好的风格。

在实际应用中,XAML应仅用于声明性编程。例如,将命令绑定到按钮或声明数据绑定。 Karl Shifflett有一些关于MVVM模式的精彩文章,它很好地区分了你的WPF / Silverlight应用程序的问题。

我认为代码背后适用于小型应用程序。它倾向于混合视图,控制和数据。

答案 1 :(得分:1)

如果我没记错的话,我认为有一个部分类实现了上面的Init代码,它是由visual studio编写的代码。我不能代表WPF,但它在ASP.Net 2.0中这样做,所以我假设它在这里做的相同。我永远习惯了这一点。

我同意。我讨厌在标记中定义事件。

答案 2 :(得分:0)

我同意你的担忧。

经过多次辩论,我们在代码隐藏中遵循类似的非侵入式,超精益XAML和绑定命令和数据模式。

如果您在XAML中添加事件,则会有一个事件代码的上下文菜单导航。如果在XAML中绑定命令,则没有等效命令。您可以从XAML中的命令声明进行导航,但不能将其分配给控件上的Command属性。

答案 3 :(得分:-2)

MVVM是不好的做法。 您认为您将数据和视图分开。什么?使用XAML绑定,绑定命令,将其转换为方法以及实现INotifyPropertyChanged的总体机制是什么?对于UTests(我做了 - 我测试了他的概念 - 他)?只有在用户的测试中才需要正确的软件...这是你的代码以你有时无法理解的方式分开的。

您使用INotify的是什么?对于什么Microsoft ALL WPF控件和WPF中的整体实体使用魔术DependencyProperties继承自FrameworkElement?

多重绑定是硬资源技术(读MVVM的作者)。

我编写的高复杂3D CAE系统没有任何模式少于一年...... 经典的app组织,包含类和代码隐藏。 https://skydrive.live.com/?cid=ea6ad1087e3103f0&sc=photos&id=EA6AD1087E3103F0!103&sff=1#cid=EA6AD1087E3103F0&id=EA6AD1087E3103F0!118&sc=photos

MVVM中的所有样本都与公司中的客户有关...... 我提供名称MVVMCC模式(客户在公司)