Selector

Selector是一个抽象类,继承ItemsControl类(包含任何类型的对象(例如字符串,图像或面板)的集合),而本文的4个兄弟都是Selector类下的4个属性。

SelectIndex

SelectIndex的作用是

获取或设置当前选择项中第一项的索引,如果选择项为空,则返回负数(-1)
大致理解成将集合像数据那样排序,index就是序号,根据序号设置获取选中项。
以下代码表示选择索引为0也就是默认选中第一项。

<ListBox Margin="10,0,0,5" SelectedIndex="0"
Name="listBox1" VerticalAlignment="Top" Grid.Column="0" Grid.Row="4">
<ListBoxItem>Item 0</ListBoxItem>
<ListBoxItem>Item 1</ListBoxItem>
<ListBoxItem>Item 2</ListBoxItem>
<ListBoxItem>Item 3</ListBoxItem>
</ListBox>

SelectedItem

SelectedItem作用是
获取或设置当前选定项目或null没有当前选定项目的对象。

注意,是整个对象
如果数据源是Collection< Class>,那么SelectedItem就是Class 的对象。我们可以通过SelectedItem来获取对象的相关属性。

但是,如果我仅仅只需要Id一个属性,那么通过SelectedItem是不是过于浪费了呢?所以为了满足这项需求,SelectedValue和 SelectedValuePath应运而生。

SelectedValue和 SelectedValuePath

假设数据源是Collection< Class>,如果需要获取Id,我们只需要将数据源绑定后,SelectedValuePath=“id” ,SelectedValue={Binding yourProperty}即可。
有点千万注意:
SelectedValue属性是用来获取选中值的,并不是为了设置,设置就算双向绑定也是无法更改绑定控件Text的只有SelectedItem可以。

DisplayMemberPath

作用:
源对象上的值的路径。这可以是任何路径,也可以是XPath,例如“ @Name”。默认值为空字符串(“”),设置后会对应绑定数据源对应的属性名称。
通俗来说,就是设置要显示的路径,例如

<ComboBox ItemsSource="{Binding Human}"
SelectedValue="{Binding ID, Mode=TwoWay}"
SelectedValuePath="ID"
DisplayMemberPath="Name" />

DisplayMemberPath="Name,下拉框显示路径是Human.Name.

IsSynchronizedWithCurrentItem

作用:
获取或设置一个值,该值指示Selector是否应保持Items属性中当前项目与SelectedItem同步。
这个属性是bool?类型,设置是否同步当前选中项。

即如果有两个combobox设置了IsSynchronizedWithCurrentItem=“True”,当你选择其中一个,另外一个会自动变化。

<ListBox Name="employeeListBox1"
ItemsSource="{Binding Source={StaticResource Employees}}"
ItemTemplate="{StaticResource EmployeeItemTemplate}"
IsSynchronizedWithCurrentItem="True"/> <ListBox Name="employeeListBox2"
ItemsSource="{Binding Source={StaticResource Employees}}"
ItemTemplate="{StaticResource EmployeeItemTemplate}"
IsSynchronizedWithCurrentItem="True"/>

实际运用要点:

以下是使用心得

尽量不要SelectedItem和SelectedValue一起用,会先加载SelectedItem后加载SelectedValue,如果你的SelectedValue没有指定值,它会更改SelectedItem的值为null。

双向绑定情况下,SelectIndex和SelectedValue SelectedItem一起用时,SelectIndex会先执行,SelectedValue、SelectedItem后执行,最后数据显示决定于SelectedItem或SelectedValue

SelectedValue只有在控件初始化时设置的初始值会更改显示Text,后续在后台更改值,文本都不会有变化,从后台更改选中项,请选择SelectedItem

网上看到很多说IsSynchronizedWithCurrentItem属性可以用于设置默认第一项,实际显示效果确实会第一项,但是绑定的SelectedItem和SelectedValue并不会自动赋值,仅仅只是更改了文本值

总结

以上皆是个人心得,如果错误,还请指正,谢谢

WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?的更多相关文章

  1. SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解

    无论在Winform.WPF.ASP.NET中,数据绑定是我们经常使用的一个重要技术,我们经常会把相关类动态显示绑定到UI界面中,其中有几个比较重要的属性需要大家灵活运用. 那Combox来说明有两个 ...

  2. WPF中,Combox的SelectedItem属性绑定成功后,未能默认显示上一次选择的结果。

    问题描述: Combox中,设定了绑定对象,但是在第一次进入时却没有显示上次选中的项.      1)查看SelectedItem对应绑定的值,也是有的(启动时,读取上次设置的结果,来初始化界面). ...

  3. dropdownlist控件的几个属性selectedIndex、selectedItem、selectedValue、selectedItem.Text、selectedItem.value的区别

    转自http://blog.csdn.net/iqv520/article/details/4419186 1. selectedIndex——指的是dropdownlist中选项的索引,为int,从 ...

  4. 服务器控件的几个属性 SelectedIndex、SelectedItem、SelectedValue、SelectedItem.Text、selectedItem.value

    转自http://blog.csdn.net/iqv520/article/details/4419186 1. SelectedIndex ——选项的索引,为int,从0开始,可读可写 2. Sel ...

  5. WPF CoboxItem控件使用SelectedItem去调System.Windows.Controls.ComboBoxItem: 前缀方法

    textComBox.SelectedItem as ComboBoxItem).Content textConbox: 控件Combobox 的Name 在Combobox控件SelectionCh ...

  6. [WPF系列]基础Combox

    示例     参考 WPF combobox SelectedValue binding to string Confused with wpf ComboBox DisplayMemberPath, ...

  7. WPF自定义控件(一)の控件分类

    一.什么是控件(Controls) 控件是指对数据和方法的封装.控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能.控件创建过程包括设计.开发.调试(就是所 ...

  8. WPF开发为按钮提供添加,删除和重新排列ListBox内容的功能

    介绍 我有一种情况,我希望能够将项目添加到列表中,并在列表中移动项目,这似乎是使用a的最简单方法ListBox.我立刻想到了如何以通用的方式做到这一点,然后,也许,可以使用行为来做到这一点.这似乎是一 ...

  9. 使用 WPF 创建单实例应用程序

    一个简单的例子就是大家在使用很多应用程序,例如在使用Microsoft Word 时会遇到一种情况,不管你打开多少个文档,系统一次只能加载一个winword.exe 实例.当打开新文档时,文档在新窗口 ...

随机推荐

  1. java 多线程40个问题汇总(转)

    java 多线程40个问题汇总,自己也记录一份,如有侵权,联系删除 ref from :http://www.cnblogs.com/xrq730/p/5060921.html 1.多线程作用 - 利 ...

  2. 关于char是否能表示一个中文

    char是可以表示中文的 这个问题点有3个考核点 1 char是多少位的 2 java用的是什么方式表示字符 3 Unicode是用多少位表示的 1的答案是16位的,2的答案是Unicode,3的答案 ...

  3. 一个轻量级的.Net Core微服务快速开发的轮子

    前言     Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...

  4. Redis性能篇(二)CPU核和NUMA架构的影响

    Redis被广泛使用的一个很重要的原因是它的高性能.因此我们必要要重视所有可能影响Redis性能的因素.机制以及应对方案.影响Redis性能的五大方面的潜在因素,分别是: Redis内部的阻塞式操作 ...

  5. Hive日期函数总结(转学习使用)

    一.时间戳函数 1.获取当前时区的UNIX时间戳:select unix_timestamp(); 2.将指定时间转为UNIX时间戳: select unix_timestamp('2012-03-0 ...

  6. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  7. python学习笔记 | 递归思想

    1.引子 大师 L. Peter Deutsch 说过: To Iterate is Human, to Recurse, Divine. 中文译为:人理解迭代,神理解递归 2.什么是递归 简单理解: ...

  8. Kafka底层原理剖析(近万字建议收藏)

    Kafka 简介 Apache Kafka 是一个分布式发布-订阅消息系统.是大数据领域消息队列中唯一的王者.最初由 linkedin 公司使用 scala 语言开发,在2010年贡献给了Apache ...

  9. 【MySQL】1托2 ab复制 一个主机两个slave操作手册

    所有实验环境全部是新建的,如果不是新建的mysql一定要备份!!! 环境:CentOS release 6.8 x64 master:192.168.25.100 slave1: 192.168.25 ...

  10. 【易筋经】Llinux服务器初始化及常用命令大全

    Llinux服务器初始化及常用命令大全 1.关闭防火墙以及内核安全机制 systemctl stop firewalld systemctl disable firewalld ##永久性关闭 set ...