我越了解WPF和XAML,我就越发现你可以在XAML或代码(比如C#代码或VB.Net代码)中完成所有的GUI初始化和事件处理.
我的问题是那些已经在WPF工作更长时间的人,理想情况下那些已经发布了应用程序的人 - 你在哪里找到了在XAML和代码之间"画线"的最佳位置?你有没有在任何地方使用XAML?只有在与非编码UI设计师接口的地方?
这方面的任何提示对我自己和刚刚进入WPF编程的其他程序员都非常有帮助,并且会因我们可以做出的所有选择而瘫痪!
我要看的一件事是模型 - 视图 - 视图模型模式.这是一个非常优雅的模式,自然地将所有东西分成漂亮的桶......包括你的xaml.
例如,它可以帮助您在开发人员和设计人员之间保持清晰的界限,甚至允许进行测试驱动的开发.
其中有很多信息,但我会从John Gossman的博客文章开始:
http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx
http://blogs.msdn.com/johngossman/archive/2005/10/09/478894.aspx
http://blogs.msdn.com/johngossman/archive/2006/02/26/539598.aspx
http://blogs.msdn.com/johngossman/archive/2006/02/27/540304.aspx
http://blogs.msdn.com/johngossman/archive/2006/03/04/543695.aspx
http://blogs.msdn.com/johngossman/archive/2006/04/13/576163.aspx
更新: 只想将人们指向另一个StackOverflow 帖子,其中有很多关于MV-VM的好信息.
一个提示是不在XAML中声明事件处理程序.相反,命名您的元素并在代码隐藏中附加事件处理程序.这有助于在设计人员和开发人员之间保持清晰的分离.
正如其他人所建议的那样,请尝试遵循Model-View-ViewModel模式.但是,把东西放在代码隐藏中是可以的!规则是,如果它与"视图"相关,则将其放在Xaml或代码隐藏中(以更方便的方式).如果与用户如何与系统交互相关的业务逻辑更多,则它属于ViewModel.如果它只是与交互无关的业务逻辑,则它属于模型.
每个的例子是:
Model:定义一个名为ModifiedDate的属性,用于存储上次修改时间.
ViewModel:将ModifiedDate转换为名为ModifiedAge的枚举属性,具体取决于修改时间:昨天,上周,上个月,去年等.
视图:将ModifiedAge属性转换为背景颜色,其中最近访问的数据突出显示为亮黄色,而最近访问较少的数据更像是设计师所坚持的米色 - 卡其色灰色,称为"Meadow Lark Lilly Flowerpot".
另一个提示是将XAML分为功能和美学.开发人员通常使用功能性XAML,而设计人员主要关注美学.这使得功能XAML非常容易理解,这很重要,因为开发人员经常需要编辑这样的XAML.美学XAML通常由设计师使用工具编辑,因此其整洁和冗长不是问题.
我刚才在这里做了一篇博文.