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

ListBox的基础绑定

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

<ListBox Name="list_axis" DisplayMemberPath="Name" SelectedValuePath="Num" SelectionChanged="list_axis_SelectionChanged"/>

DisplayMemberPath属性:显示的值

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

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

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

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



//整个数据源
static public List<Axis> axisList = new List<Axis>()
{
    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());
    }
}
        


执行效果:


SelectedValuePath 和 SelectedValue 的关系

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

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

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

<ComboBox SelectedValuePath="Content" 
    SelectedValue="{Binding ConfigVM.config_infos.SpectrumType}"
              >
    <ComboBoxItem>BSHP</ComboBoxItem>
    <ComboBoxItem>Flame</ComboBoxItem>
</ComboBox>

如果你没有设置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的值还是之前的值,这不利于我们更新数据到数据源。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值