我的任务是为我的公司设计联系人管理程序。我们有VS 2012,因为我之前从未使用WPF,我认为我会用它来开发这个应用程序。
在使用btw首先是数据库的数据库的实体框架时,我遇到了很大的问题。
我已按照此链接中的说明操作。 http://msdn.microsoft.com/en-us/data/jj574514.aspx
对象显示在数据源窗口中就好了。但当我拖放到我的窗口时,没有任何反应。不知道我做错了什么,找不到其他人有这个问题。
任何人都可以帮助我吗?我到处寻找。任何帮助表示赞赏
答案 0 :(得分:5)
确定。我实际上是通过那篇文章,只是为了表现出诚意并让你知道我真的想帮助你。
我得出以下结论:
你可以使用设计师来处理你不需要复杂逻辑的情况,但是我必须警告你以下缺点:
x:Name="categoryIdColumn"
和类似Margin="13,13,43,191"
之类的东西,从维护性/可伸缩性的角度看它们真的很糟糕)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,但这没关系,因为它实际上是一个实体框架教程,而不是WPF教程。
易于开发
你真的需要重新考虑你所说的“易于开发”。当涉及到UI开发时,我将“易于开发”称为实际being able to do what I want with the UI,而不必诉诸涉及P / Invoke(无论那意味着什么)和“所有者绘制”类型的东西的糟糕程序代码实践。
WPF提供了真正的易开发性,而不是winforms所展示的虚假开发
winforms让你可以用设计师做任何事情(这只是因为设计师生成的代码实际上是如此糟糕,以至于如果他们没有设计师就没有人会使用过winforms)但是当它到来时添加复杂的数据绑定或UI逻辑,你永远不会遇到winforms的无能。
WPF鼓励手工编写XAML,不仅因为XAML是声明性的(与程序性winforms方法相反),而且因为可定制性和可重用性的水平如此之高,以至于以设计师为中心的方法没有意义
拖放是最简单的方法
不,不是。这实际上是艰难的方式。简单的方法是学习XAML并能够Things you can't even imagine to do with winforms。
如果以设计师为中心的方法对您有意义,您可能想尝试Expression Blend
答案 1 :(得分:4)
自动从模型创建数据网格
使用数据源将模板拖放到WPF控件上是一种非常快速的启动和运行方式!
首先执行此操作:在项目中创建名为Models的文件夹,然后首先使用Entity Framework DB或手动编写要显示的模型。
在同一个文件夹中创建一个虚拟类,它是IEnumerable的一个属性,就像这样..
public IEnumerable<MyClassModel> MyCollection { get; set; }
从那里转到主Visual Studio菜单,查看/其他Windows /数据源,然后单击该链接。
单击Object并找到刚刚在上面创建的MyCollection属性。
现在在WPF中打开一个用户控件或窗口,但保持数据源工具箱打开。
它应默认为DataGrid,但您可以右键单击数据源并将其更改为detail,datagrid或选择它所代表的类的各个属性。
只需将该数据源拖到XAML的网格区域即可。右键单击您看到的新内容,然后单击重置以将内容设置为整个窗口的大小。
完成此操作后,您将在该窗口的窗口加载事件,usercontrol等中将代码注入到视图后面的代码中。
// Do not load your data at design time.
if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
//Load your data here and assign the result to the CollectionViewSource.
System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["Resource Key for CollectionViewSource"];
myCollectionViewSource.Source = your data
// }
返回XAML并查找在将属性拖动到XAML时也插入的CollectionViewSource KEY属性。它看起来像这样:
在后面的代码中使用密钥名称,然后将CVS“绑定”到您的数据源,该数据源是MyClassModel类型的可枚举,它可以在视图模型中或您选择的视图后面的代码中存在。
如果您只使用CollectionViewSource作为网格的datacontext,则不需要为任何底层集合实现INPC!每次更新源时,CVS都会自动更新视图!一旦掌握了这一点,您就可以在2分钟内创建工作View数据原型!忘记只需要太长时间的手工编码XAML。