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. 记录第一次使用Vivado——以全加器为例子

    从altera转战xilinx,经典的FPGA到ZYNQ系列,第一站就是先熟悉编译软件Vivado.我就直接跳过软件安装部分了,如有疑问,可以在评论区提出来,我看到了就帮你解答. 首先是是打开界面 然 ...

  2. 讲两个int 数组找出重复的数字 用最少的循环

    int a[] = {1,3}; int b[] = {1,3,5}; int size = a.length>b.length ?a.length:b.length; int valueA = ...

  3. Idea创建Maven项目时出现Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1错误

    如果Maven中用的jre用的是idea中自带的,但是环境变量JAVA_HOME配置的是自己的jdk,那么就会出现 解决方法是到settiing中把jre改成自己的jdk中的jre 经过尝试,问题解决

  4. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...

  5. ESP32 BLE蓝牙 微信小程序通信发送大于20字符数据

    由于微信小程序只支持BLE每次发送数据不大于20个字节,ESP32则有经典蓝牙.低功耗蓝牙两种模式. 要解决发送数据大于20个字节的问题,最简单实用的方式就是分包发送.如下图所示: 1.什么起始字符和 ...

  6. Java IO流 FileOutputStream、FileInputStream的用法   

    FileOutputStream.FileInputStream的使用 FileOutputStream是OutputStream的继承类,它的主要功能就是向磁盘上写文件.FileOutputStre ...

  7. 技术选型关于redis客户端选择

    redis作为分布式缓存框架的首选  相信已经毋庸置疑.能高效.合理的使用好它  必定能提升系统的可用性,高性能.高吞吐量的保障.但选择一个客户端,充分发挥它的能力,就是一个选型问题.现在市场上能选择 ...

  8. 自动化运维工具-Ansible之7-roles

    自动化运维工具-Ansible之7-roles 目录 自动化运维工具-Ansible之7-roles Ansible Roles基本概述 Ansible Roles目录结构 Ansible Roles ...

  9. element-ui使用后手记

    一.路由模式el-menu中使用路由模式 在el-meun中设置:router="true" 在el-menu-item中设置index="路由地址"

  10. Docker-Docker部署SpringBoot项目

    1.手工方式 1.1.准备Springboot jar项目 将项目打包成jar 1.2.编写Dockerfile FROM java:8 VOLUME /tmp ADD elk-web-1.0-SNA ...