我有点惊讶的是,在学习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.";
}
有关为什么这会是一个好的或坏的做法的任何想法?
答案 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模式(客户在公司)