• 理解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

  • 相关阅读:
    【刷题】AtCoder Regular Contest 002
    【刷题】AtCoder Regular Contest 001
    【刷题】LOJ 2863 「IOI2018」组合动作
    (栈)栈 给定push序列,判断给定序列是否是pop序列
    网易面试题:和为n连续正数序列
    Google面试题:计算从1到n的正数中1出现的次数
    递归法
    打印给定字符串中字符的所有排列
    C++ 实现不能被继承的类
    atoi 实现
  • 原文地址:https://www.cnblogs.com/Dincat/p/13430869.html
Copyright © 2020-2023  润新知