从数据源拖放到WPF窗口不起作用

Pau*_*aul 4 data-binding wpf

我的任务是为我的公司设计一个联系人管理程序.我们有VS 2012,因为我之前从未使用WPF,我认为我会用它来开发这个应用程序.

当使用实体框架为btw首先是数据库的数据库时,我在开始绑定时遇到了很大的问题.

我已按照此链接中的说明操作. http://msdn.microsoft.com/en-us/data/jj574514.aspx

The objects show up in the data sources window just fine. But when I drag and drop to my window, nothing happens. No idea what I am doing wrong and cannot find anyone else with this problem.

Can anyone help me out here? I have looked everywhere. Any help is appreciated

Fed*_*gui 6

好.我实际上是通过那篇文章,只是为了表达诚意,让你知道我真的想帮助你.

我得出以下结论:

  • 该文章展示了一个非常基本的场景,即从Entity Framework上下文获取数据并在WPF DataGrid中显示它.
  • 它没有任何形式的验证或业务规则.
  • 它没有任何UI行为,例如有条件地启用/禁用或显示/隐藏任何UI元素.
  • 除了从数据库获取/保存数据之外,除了获取/保存数据之外,这种情况是Designer非常有用的地方.
  • 不幸的是(或者幸运的是,我们所有以此为生的开发人员),大多数应用程序都需要一定程度的验证和业务规则以及某种级别的UI逻辑.
  • 在开发复杂逻辑时,设计师真的没用.

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

  • Visual Studio WPF设计器生成固定大小的固定位置UI.在具有不同屏幕分辨率和DPI设置的计算机中执行时,这些类型的UI无法正常工作.就像winforms一样.
  • 它还会生成包含许多不必要的东西的XAML(例如从维护性/可伸缩性的角度来看,这些x:Name="categoryIdColumn"东西Margin="13,13,43,191"真的很糟糕)
  • 从我所看到的,设计师生成的XAML也包含一个CollectionViewSource,这既是好事也是坏事.这是一件好事,因为它可以Design-Time Data在DataGrid中启用,但它也很糟糕,因为它会使你的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>
Run Code Online (Sandbox Code Playgroud)

你看?实际上更快地输入(在Intellisense的帮助下更多),而不是手动浏览属性窗口和设置这些属性.

我的建议是你熟悉XAML,而不是坚持以艰难的方式做事


要记住的另一个非常重要的方面是,一般来说,你不会在WPF中放置任何代码隐藏,因为它不需要,因此该教程实际上违背了WPF的做事方式,但是这很好,因为它实际上是实体框架教程,而不是WPF教程.


易于开发

你真的需要重新考虑你所说的"易于开发".在UI开发方面,我称之为"易于开发",实际上能够用UI做我想做的事情,而不必诉诸涉及P/Invoke(无论那意味着什么)和"所有者绘制"类型的糟糕程序代码实践对于外翻的事情.

WPF提供了真正的易开发性,而不是winforms所展示的虚假开发

  • winforms允许您使用设计器完成所有操作(这只是因为设计器生成的代码实际上非常糟糕,以至于如果没有设计人员就没有人会使用winforms)但是在添加复杂的DataBinding或UI时你永远陷入winforms无能为力的逻辑.

  • WPF鼓励手动编写XAML,不仅因为XAML是声明性的(与程序性winforms方法相反),而且因为可定制性和可重用性的水平如此之高,以至于以设计者为中心的方法没有意义.


拖放是最简单的方法

不,这不对.这实际上是艰难的方式.简单的方法是学习XAML并能够做你甚至无法用winforms做的事情.


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