【WPF绑定1】 ListBox/ComboBox基础绑定

ListBox的基础绑定

下面是ListBox的基础绑定设置:

DisplayMemberPath属性:显示的值

SelectedValuePath属性:在选中某个Item时我们可以通过ListBox的SelectedValue属性获取的值的类型

我们先构建一个list数据结构,包含DisplayMemberPath和SelectedValuePath指定的属性:Name和Num

//单个item的数据结构
public class Axis
{
    /// 
    /// 软轴号
    /// 
    public int Num { get; set; }

    /// 
    /// 轴名称
    /// 
    public string Name { get; set; }
}



//整个数据源
static public List axisList = new List()
{
    new Axis(){Num=0,Name="吸嘴X轴"},
    new Axis(){Num=1,Name="吸嘴Y轴"},
    new Axis(){Num=2,Name="吸嘴Z轴"},
    new Axis(){Num=3,Name="托盘轴"},
    new Axis(){Num=4,Name="切膜Z轴"},
    new Axis(){Num=5,Name="贴膜台Z轴"},
    new Axis(){Num=6,Name="上料Z轴"},
    new Axis(){Num=7,Name="推PCB轴"},
    new Axis(){Num=8,Name="托膜轴"},
    new Axis(){Num=9,Name="压膜轴"},
    new Axis(){Num=10,Name="切膜旋转轴"},
}; 

后台代码

public PageMotorTest()
{
    InitializeComponent();
    //用于绑定源数据
    this.list_axis.ItemsSource = App.axisList;
}


private void list_axis_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (list_axis.SelectedItem != null)
    {
        //注意SelectedValue的值!
        MessageBox.Show(list_axis.SelectedValue.ToString());
    }
}
        


执行效果:

【WPF绑定1】 ListBox/ComboBox基础绑定_第1张图片


SelectedValuePath 和 SelectedValue 的关系

在上述ListBox的Binding中,我们指定了ItemsSource 是一个数组,那么ListBox每个子项其实就是数组的一个元素,如果不设置SelectedValuePath ,SelectedValue就对应的选择的那个元素,而这个元素有多个属性,SelectedValuePath 像是一个过滤器帮你选择这个元素的哪个属性,一旦设置了SelectedValuePath,那么SelectedValue对应的就是元素的那个属性。

这里我们再用ComboBox做一个实验:

这里我并没有指定ItemsSource,而是直接将子项写道前台里面,那此时ComboBox每个子项其实就是ComboBoxItem。


    BSHP
    Flame

如果你没有设置SelectedValuePath,那么SelectedValue对应的会是ComboBoxItem这个类对象,转换成字符串就是'System.Windows.Controls.ComboBoxItem: Flame'  如果你只想要其中的内容Flame,此时就需要设置SelectedValuePath="Content",此时SelectedValue才会对应Flame/BSHP。

SelectedValue 和 Text 的区别

这里,有的同学可能会提出问题:我直接绑定Text属性不就行了?Text属性这里有两个问题:

1 对应ComboBox而言,IsEditable="True"时 Text才能显示内容。(而有的时候我们不希望编辑)

2 SelectionChanged事件触发后,此时只会改变SelectedValue的值,而此时Text的值还是之前的值,这不利于我们更新数据到数据源。

你可能感兴趣的:(WPF,wpf,microsoft)