【问题标题】:is "non-intrusive code-behind" a good or bad practice?“非侵入式代码隐藏”是好还是坏的做法?
【发布时间】:2010-10-08 12:56:48
【问题描述】:

我有点惊讶,在学习 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.";
}

对于为什么这是一个好的或坏的做法有什么想法吗?

【问题讨论】:

    标签: xaml code-behind


    【解决方案1】:

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

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

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

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

    MVVM 中的所有样本都是关于公司客户的... 我提供将名称命名为 MVVMCC 模式(公司中的客户)

    【讨论】:

      【解决方案2】:

      我同意你的担心。

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-28
            • 2016-11-10
            • 1970-01-01
            • 1970-01-01
            • 2021-07-06
            • 1970-01-01
            • 2011-05-29
            • 2020-05-19
            相关资源
            最近更新 更多