理解SelectedValue, SelectedValuePath, SelectedItem & DisplayMemberPath + Demo
Posted dincat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解SelectedValue, SelectedValuePath, SelectedItem & DisplayMemberPath + Demo相关的知识,希望对你有一定的参考价值。
该项目是使用VS2012构建的,目标是。net 4.目录 又快又脏,→截屏。额外阅读,→口头解释。演示代码->通过只走; Introduction , 我看到过这个问题突然出现,所以我想给那些想要解决这个问题的人提供一个参考。又快又脏->他们说一张图片抵得上1000个单词,所以这里有一张图片:我说一个演示值1000张图片,所以请随意下载代码并自己玩它。额外阅读——口头解释。这不是一个新的话题,你可以很容易地看到如果你看这里,,这里,这里或官方的msdn页面只(做注意,官方的msdn(写这篇文章的时候),0 4认为它有用的),只设置SelectedItem:这将返回thelist /下拉列表框中当前选中的项的容器。正如您所看到的,这是一个对象(因为我的列表包含对象)。如果你的List/Combobox/etc包含一个字符串列表,它将是一个字符串。如果它包含int,它将是一个int. SelectedValuePath:设置这将使属性SelectedValue 返回你在这里选择的属性的值。在我们的示例中,选择“ShapeColor”将使SelectedValue只返回颜色,而不是整个shape对象。注意:在这里您将属性名设置为字符串。看看下面的例子演示code 代码只SelectedValue:如果你只想要一个对象的一部分,设置上述属性,这里你会得到这个属性的值只注意,如果没有使用SelectedValuePath,这是一样的使用设置SelectedItem只DisplayMemberPath:将其设置为对象的属性,将导致GUI在选择类时显示该属性,而不是看到类名或类ToString()方法(应该始终提供)。请看这本书ToC 中的第5项。使用代码 我想让它尽可能的简单和简短,同时提供足够的冲击力,让它变得有趣。我使用了一个简单的Xaml文件,后面有一些代码,它总共有大约200行代码(包括空格和一些注释)。 持有DockPanel页脚底部和StackPanel将填补窗口(默认情况下这个孩子)只因为我没有使用MVVM在这个例子中,我结合起来给窗口一个名字,然后参照这个名字绑定ElementName只将指向匹配的路径属性文件背后的代码只隐藏,Code
Window x:Class="SelectedValue_and_SelectedItem.MainWindow" ... Name="SelectionFun" >
Hide副本,这涵盖了第一部分,创建对象并将其绑定到列表中,这样您就可以选择一个形状。第二个区域有两个组合框,你可以在那里选择你想要绑定/看到的属性,还有一些标签,显示你实际选择了什么。我还将网格的一部分与形状的颜色绑定,以获得一些额外的视觉反馈。组合框看起来是这样的:标签是直接颠倒的,所以让我们继续。MainWindow.xaml.cs -后面的代码,我为我的对象使用的结构是一个虚拟的我的形状,看起来像这样:复制名为GetShapesList()的Code
public class MyShape { public string ShapeType { get; set; } public string ShapeColor { get; set; } public int ShapeSides { get; set; } }
A方法将用如下对象填充形状列表:复制Code
return new ObservableCollection<MyShape> { new MyShape{ShapeType = "Circle", ShapeColor = "Blue", ShapeSides = 0 }, new MyShape{ShapeType = "Triangle", ShapeColor = "Yellow", ShapeSides = 3 }, ... }
(边是实际形状的边,颜色只是我添加的随机颜色)当我们到达PropertiesList时,事情变得很有趣,它是这样填充的:PropertyObject是一个简单的类,用于保存我们正在处理的属性的名称和类型(都是字符串)。首先我们将添加一个空的,所以当被选中时,它将“重置”绑定到默认。然后我们将使用反射来找到MyShape类上的所有属性,这样我们就可以从组合框中选择它们。您可以随意添加更多属性,或者将此方法泛化为将类作为参数,然后只需传递您自己的自定义类就可以看到它的作用。SelectionChanged事件只是根据被选择的内容设置列表框的源属性(我们在xaml中称之为SourceListBox)。例如:隐藏,复制Code
private void DisplayMemberPathCmbx_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Get the value ComboBox cmbx = (ComboBox)sender; PropertyObject prop_ob = ((PropertyObject)cmbx.SelectedItem); string name = prop_ob.PropertyName; // Actual setting happens here SourceListBox.DisplayMemberPath = name; }
That的它。下载代码并让它运行起来:)感兴趣的地方 我通常倾向于MVVM这些天,但我想保持简短的代码,所以我选择了方法背后的代码只注意使用反射动态属性及其类型,和我们将xaml绑定到属性使用names.History 21.10.2013:最初版本只随意留言,反馈和/或问任何问题。 本文转载于:http://www.diyabc.com/frontweb/news160.html
以上是关于理解SelectedValue, SelectedValuePath, SelectedItem & DisplayMemberPath + Demo的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 JavaScript 中 RadioButtonList 的 SelectedValue?