我的任务是为我的公司设计联系人管理程序。我们有VS 2012,由于我从未使用过WPF,所以我以为我会用它来开发此应用程序。

在将实体框架用于数据库时(绑定优先是数据库),我在绑定上遇到了很大的问题。

我已按照该信件链接的说明进行操作。
http://msdn.microsoft.com/en-us/data/jj574514.aspx

对象显示在数据源窗口中就好了。但是,当我拖放到窗口时,什么也没有发生。不知道我在做什么错,找不到其他人遇到这个问题。

有谁可以帮我离开这里吗?我到处都看过。任何帮助表示赞赏

最佳答案

好。我实际上读了这篇文章,只是为了表示真诚,并告诉您我实际上是想帮助您。

我得出以下结论:


该文章展示了一个非常基本的场景,该场景是从Entity Framework上下文获取数据并将其显示在WPF DataGrid中的。
它没有任何类型的验证或业务规则。
它没有任何UI行为,例如有条件地启用/禁用或显示/隐藏任何UI元素。
在这种情况下,当您实际上不需要什么东西(从数据库中获取数据或将数据保存到数据库中)时,设计器就非常有用。
不幸的是(或者幸运的是,对于我们所有人来说,靠它生存),大多数应用程序将需要某种程度的验证和业务规则以及某种程度的UI逻辑。
对于开发复杂的逻辑,设计人员真的没有用。


您可以在不需要复杂逻辑的情况下使用设计器,但是我必须警告您以下缺点:


Visual Studio WPF设计器生成固定大小,固定位置的UI。在具有不同屏幕分辨率和DPI设置的计算机中执行这些类型的UI时,效果不佳。就像winforms一样。
它还会生成XAML,其中包含许多不必要的内容(例如x:Name="categoryIdColumn"Margin="13,13,43,191"这样的东西,从可维护性/可伸缩性的角度来看,它们确实很糟糕)
从我所看到的,设计师生成的XAML还包含一个CollectionViewSource,这既是一件好事,也是一件坏事。这是一件好事,因为它在DataGrid中启用了Design-Time Data,但同时也很不好,因为它用大量不需要的东西使XAML膨胀,并引入了不必要的<Window.Resources>使事情复杂化。


现在,这是该DataGrid所需的非常小的XAML,没有设计时数据支持:

<Window x:Class="MiscSamples.DesignTimeDataGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DesignTimeDataGrid">
    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGridTextColumn Header="Category Id" Binding="{Binding CategoryId}"/>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
    </DataGrid>
</Window>


你看?实际上,键入该命令(在Intellisense的帮助下,键入的速度要比浏览属性窗口和手动设置这些属性要快得多)。

我的建议是您熟悉XAML,而不要坚持用艰苦的方式做事



要记住的另一个非常重要的方面是,一般来说,you don't put anything in code-behind in WPF因为不需要它,因此该教程实际上与WPF Way of doing things背道而驰,但这没关系,因为它实际上是Entity Framework教程,而不是WPF教程。




易于开发


您确实需要重新考虑所谓的“易于开发”。当涉及到UI开发时,我将“易开发性”实际上称为being able to do what I want with the UI,而不必借助涉及P / Invoke(无论意味着什么)和“所有者吸引”类型的东西的繁琐程序代码实践进行永久性开发。

WPF提供真正的易用性,而不是winforms展示的虚假易用性


winforms允许您与设计人员一起做所有事情(这仅仅是因为设计人员生成的代码实际上很糟糕,如果没有设计人员,就不会有人使用过winforms),但是在添加复杂的DataBinding或UI时逻辑上,您永远被Winforms的能力所困扰。
WPF鼓励手动编写XAML,这不仅是因为XAML是声明性的(与过程Winforms方法相对),而且还因为可定制性和可重用性级别很高,以设计人员为中心的方法没有意义。





拖放是轻松的出路


不,这不对。这实际上是困难的方法。简单的方法是学习XAML并能够执行Things you can't even imagine to do with winforms



如果以设计师为中心的方法对您仍然有意义,则可以尝试Expression Blend

09-11 17:51
查看更多