4

我有点惊讶的是,在学习 WPF/XAML/Silverlight 时,我遇到的几乎所有 XAML/C# 示例在 XAML 中都有“单击”事件,而在 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

4 回答 4

6

大多数较小的 WPF 示例只给人一种印象,而不关注设计问题或良好风格。

在现实世界的应用程序中,XAML 应该只用于声明式编程。例如,将命令绑定到按钮或声明数据绑定。Karl Shifflett 有一些关于MVVM模式的精彩文章,它很好地分离了 WPF/Silverlight 应用程序的关注点。

在我看来,后面的代码只适用于小型应用程序。它倾向于混合视图、控制和数据。

于 2009-02-19T08:58:19.770 回答
1

如果我没记错的话,我认为有一个部分类实现了上面的 Init 代码,它是由 Visual Studio 生成的代码。我不能代表 WPF,但它在 ASP.Net 2.0 中执行此操作,所以我假设它在这里执行相同操作。我花了很长时间才习惯这一点。

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

于 2009-02-19T08:43:19.820 回答
0

我同意你的担心。

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

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

于 2009-06-23T01:23:48.190 回答
-2

MVVM 是不好的做法。您认为您将数据和视图分开。什么?具有 XAML 绑定、绑定命令、将其转换为方法并实现 INotifyPropertyChanged 的​​完整机制是为了什么?对于 UTests(我制作 - 我测试他的概念)?正确的软件只需要在用户的测试中......它是你的代码以这样的方式分离,你有时不明白在哪里是什么。

你使用 INotify 做什么?对于 Microsoft ALL WPF 控件和整个 WPF 中的实体从 FrameworkElement 继承并具有魔术 DependencyProperties 的内容?

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

我在不到一年的时间内编写了没有任何模式的高度复杂的 3D CAE 系统......具有经典的应用程序组织,带有类和代码隐藏。 https://skydrive.live.com/?cid=ea6ad1087e3103f0&sc=photos&id=EA6AD1087E3103F0!103&sff=1#cid=EA6AD1087E3103F0&id=EA6AD1087E3103F0!118&sc=photos

MVVM 中的所有示例都是关于公司中的客户...我提供名称 MVVMCC 模式(公司中的客户)

于 2011-09-07T21:58:59.600 回答