当前位置: 首页 > 编程语言 > C#

给WPFListBox绑定Dictionary分享

时间:2023-04-10 15:51:19 C#

给WPFListBox绑定Dictionary给定dictionary.Values,如何给WPFListBox绑定dictionary.Values,让item使用.Name属性?structDrink{publicstringName{get;私有集;}publicintPopularity{get;私有集;}publicDrink(stringname,intpopularity):this(){this.Name=name;this.Popularity=人气;在项目控件上设置ItemsSource会创建到源对象枚举器的绑定。字典的枚举器是IEnumerable>类型。因此,在项目模板中,您可以绑定到Key和Value属性,并使用路径语法来获取键和值特定的属性。这是一个例子。首先是创建和填充字典并将其添加到资源字典的代码(有许多不同的方法可以将字典公开给数据绑定;这很简单):namespaceWpfApplication17{//////Window1.xaml的交互逻辑///publicpartialclassWindow1:Window{publicWindow1(){Dictionaryd=newDictionary();d.Add("A",newDrink("Nehi",0));d.Add("B",newDrink("莫邪",1));d.Add("C",newDrink("Vernor's",2));d.Add("D",newDrink("Canfield's",3));资源["饮料"]=d;初始化组件();}publicclassDrink{publicDrink(stringname,intpopularity){Name=name;人气=人气;}公共字符串名称{得到;放;}publicintPopularity{get;set;现在使用XAML来填充ListBox(尽管ListView会更容易,因为您不必定义这个复杂的模板来使其看起来不错):ListView的XAML更简单并且在启动时显示得更好:回答您的后续问题:我推荐AdamNathan的WindowsPresentationFoundationUnleashed。关于面板布局的章节非常详细地解释了Grid的工作原理。网格在很多方面都违反直觉。您认为您想要创建一个包含许多项目的单个Grid,但Grid中的行数和列数不是动态的。因此,您为每个项目创建一个网格,然后使用共享大小功能来确保每个网格中的列大小相同。ListView有其自身的怪癖,但对于常见的“在网格中显示多个项目”用例而言,它更为直接。DynamicResource是一种标记扩展,其工作方式与StaticResource非常相似。不同之处在于,当XAML解析器解析StaticResource时对其进行解析-如果引用的资源不在资源字典中,则会引发异常。如果稍后将项目添加到字典中,DynamicResource将解析引用。这会有一点性能成本,但在大多数情况下可以忽略不计。如果您使用StaticResource,我发布的代码会起作用,因为XAML是在InitializeComponent中解析的。但是我不想记住那个,所以我默认使用DynamicResource,如果我绑定到我在代码中添加到资源字典中的东西,不用担心它是在之前还是之后创建的。XAML被解析。至于工具箱:也许我会在VS2010中开始使用它,但我发现2008版本太多了。反正用处不大。我几乎所有的布局都是在编辑器中完成的,有些是在Kaxaml中。我认为2008年的可视化编辑器实际上让学习WPF变得更加困难,因为它在我和XAML之间强加了一个抽象层(它本身就是我和WPF对象模型之间的一个抽象层)。它不是一个很好的抽象层:应该隐藏什么和应该看到什么的设计决策不是,在我看来是正确的。这也是地狱的错误。ListBox.DisplayMemberPath="姓名";这会告诉列表框使用DataContext的"Name"属性以上就是C#学习教程:绑定字典WPFListBox分享的全部内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: