如何有效地编写WPF?

Pat*_*ski 7 wpf

当我第一次了解微软当时用于开发桌面应用程序的新框架WPF时,我认为它的最大好处之一就是它的效率.毕竟,我已经知道我想要使用的GUI控件和元素是什么 - 我只需要在页面上将它们全部打开,然后将所有绑定连接起来,我就完成了.之后,我了解了MVVM模式,它承诺在我的WPF应用程序中清晰地分离关注点.

我以为这会很棒!我和我的团队在工作中创建了几个不同的管理和数据输入WPF应用程序,因此我开始使用强大但简单的GUI来制作工作软件,对吧?

不是那么快,那里,牛仔编码器.我的经验是写WPF很慢.

好吧,至少我这样做的方式.你看,在我在白板上画了我的GUI之后,我用我想要的控件编写了XAML代码.正如预期的那样,这部分很快 - 整个窗口的布局非常快.在那之后,你想要这些元素做的所有小东西需要一段时间.在某些情况下,我似乎总是想要使这个文字变得粗体; 在其他情况下显示一个红色错误框.

然后事情解开了:这个绑定在这里工作不正常 - 我必须编写一个转换器并调整正确值的布局.哎呀,我忘记了额外的NotifyPropertyChanged那里.哦,我想在这种状态下使用不同的模板,所以我必须弄清楚在某些情况下我可以使用什么来交换模板.这些数据是异步进入的,所以我需要确保在正确的线程上发生了正确的事情,并且Property也获得了NotifyChanged.废话,当我最大化我的窗口时,它不会像我想象的那样伸展 - 必须是因为它的容器高度没有定义,但我不想定义它,所以我必须让它伸展它的家长.哦,现在我真的想在这里让用户控制这些东西,所以我最好实现一些依赖属性...

我一次又一次地花费数小时和数日来处理那些感觉如此小而小的东西.我很快就会采用切割可用性功能和外观增强功能,因为这样做太长了.

有没有人有任何提示或原则我需要尝试才能有效地编写WPF?

Rac*_*hel 2

编写您自己的库,或查找现有的库。

WPF 很棒,但是它缺少一些可以使编码速度更快的东西。我厌倦了重复编写相同的东西,所以我最终创建了自己的库,里面充满了转换器、可视化树助手、附加属性、自定义控件等,从那时起,我的开发时间大大加快了。

除了我自己的库之外,我还开始使用 Microsoft 的Prism和 Galasoft 的MVVM Light Toolkit。两者都包含我一直使用的有用对象,并且比我自己编写的代码更好。(最常用的是NotificationObjectPrism、RelayCommandMVVM Light Toolkit 和EventAggregator/或Messenger根据项目等选择其中之一。)

我为加快编码时间所做的另一件事是利用 Visual Studio 的宏。例如,要创建带有更改通知的属性,我编写私有属性 hit Ctrl+E,它会生成公共版本,然后运行一个宏,该宏会在 setter 方法中Ctrl+R自动设置通知。PropertyChanged

我几乎从不更改默认宏的 setter 方法,而是使用PropertyChanged事件来处理 setter 上应该发生的任何更改。这不仅使跟踪应用程序流程变得更加容易,而且还大大减少了我过去浪费浏览公共属性来更改 setter 方法的时间。