我的任务是为我的公司设计一个联系人管理程序。我们有VS 2012,因为我从来没有使用过WPF之前,我想我会用它来开发这个应用程序。
我有巨大的问题开始对绑定时,利用实体框架的数据库,其中btw是数据库第一。
我已经按照这个链接中的指示去信了。http://msdn.microsoft.com/en-us/data/jj574514.aspx
对象在数据源窗口中显示得很好。但是当我拖放到我的窗口时,什么也没有发生。不知道我做错了什么,也找不到其他有这个问题的人。
有人能帮帮我吗?我到处都找过了。任何帮助都很感激
3条答案
按热度按时间f1tvaqid1#
好吧。我实际上看了那篇文章,只是为了表示诚意,让你知道我真的想帮助你。
我得出以下结论:
你可以在不需要复杂逻辑的情况下使用设计器,但是我必须警告你以下缺点:
x:Name="categoryIdColumn"
和Margin="13,13,43,191"
之类的东西,从可维护性/可伸缩性的Angular 来看,这些东西非常糟糕)CollectionViewSource
,这既是一件好事,也是一件坏事。这是一件好事,因为它在DataGrid中启用了Design-Time Data
,但它也是一件坏事,因为它用许多不需要的东西膨胀了XAML,并引入了不必要的<Window.Resources>
,使事情变得复杂。现在,这是DataGrid所需的最小XAML,没有设计时数据支持:
看到了吗?实际上,输入这些属性比浏览属性窗口并手动设置这些属性要快得多(在Intellisense的帮助下更快)。
我的建议是你熟悉XAML,而不是坚持用困难的方式来做事情
另一个需要记住的非常重要的方面是,一般来说,you don't put anything in code-behind in WPF,因为它是不需要的,因此该教程实际上是针对WPF Way of doing things的,但这是确定的,因为它实际上是一个实体框架教程,而不是WPF教程。
开发容易度
你真的需要重新考虑你所谓的“开发的容易性”。当涉及到UI开发时,我称之为“易于开发”,实际上是being able to do what I want with the UI,而不必求助于涉及P/Invoke(无论这意味着什么)和“所有者绘制”类型的事情的糟糕的过程代码实践。
WPF提供了真实的的开发简易性,而不是winforms所展示的虚假的开发简易性
拖放是最简单的方法
不不是这其实是一种艰难的方式。简单的方法是学习XAML并能够执行Things you can't even imagine to do with winforms。
如果以设计师为中心的方法对您仍然有意义,您可能想尝试Expression Blend
w8f9ii692#
从模型自动创建数据网格
使用数据源将模板拖放到WPF控件上是启动和运行的一种优秀而快速的方法!
**(能否,原作者“JWP”请提供一个链接到这本书或网页,这一技术是(希望)启发?一个提供更多辅导和背景的来源将提供一个更温和的学习曲线。
从这样做开始:在项目中创建一个名为Models的文件夹,然后首先使用Entity FrameworkDatabase-First(DB)或手动编写要显示的模型。
或者参见下面关于对象绑定的讨论...
在同一个文件夹中创建一个伪类,它是IEnumerable的一个属性,如下所示。
从那里转到主Visual Studio菜单,查看/其他窗口/数据源,然后单击该链接。
单击Object并找到上面刚刚创建的MyCollection属性。
现在在WPF中打开一个用户控件或窗口,但保持数据源工具箱打开。
它应该默认为DataGrid,但您可以右键单击数据源并将其更改为detail,datagrid或选择它所代表的类的各个属性。
只需将该数据源拖动到XAML的网格区域。右键单击你看到的新内容,然后单击重置,将内容设置为整个窗口的大小。
完成此操作后,您将在该窗口、用户控件等的窗口加载事件中将代码注入到视图后面的代码中,如下所示。
返回到XAML并查找CollectionViewSourceKEY属性,该属性也是在将该属性拖到XAML时插入的。它看起来像这样:
使用代码后面的Key名称,然后将CVS“绑定”到您的数据源,该数据源是MyClassModel类型的可枚举对象,它可以位于View Model中或视图的代码后面,如您所选。
如果您只使用CollectionViewSource作为网格的数据上下文,则不需要为任何底层集合实现**(的PropertyChanged事件和OnPropertyChanged方法)INotifyPropertyChanged接口**(INPC)!每次源代码更新时,CVS都会自动更新视图!一旦你掌握了这一点,你就可以在2分钟内创建数据的工作视图原型!忘记手工编写XAML,因为它需要太长的时间。
对象绑定
创建一个带有静态方法的静态类,该方法返回如下内容:
使用数据源向导时,选择“对象”选项。
单击“确定”,您应该会看到如下内容:
您已经将所有属性Map到了数据源定义中。
2izufjch3#
对于任何在VS 2022中发现此问题的人:根据这篇文章,VS 2022有一个已知的错误,无法将数据源拖放到XAML表单。
更多信息:https://developercommunity.visualstudio.com/t/drag-a-a-table-from-datasource-and-drop-in-a-windo/1660788
更新:它说修复程序已于6月15日发布。您可以尝试将VS 2022更新到最新版本。