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. 基础才是重中之重~BouncyCastle实现的DES3加密~java通用

    对于BouncyCastle类库(包)来说,他提供了很多加密算法,在与.net和java进行相互加解密过程中,得到了不错的应用,本文以DES3为例,来说一下DES3加解密的过程. 加密过程 明文字符转 ...

  2. [leetcode]Next Greater Element

    第一题:寻找子集合中每个元素在原集合中右边第一个比它大的数. 想到了用哈希表存这个数的位置,但是没有想到可以直接用哈希表存next great,用栈存还没找到的数,没遍历一个数就考察栈中的元素小,小的 ...

  3. [LeetCode]9. Palindrome Number判断回文数字

    /* 查看网上的思路有两种: 1.每次取两边的数,然后进行比较 2.取数的倒置数,进行比较 */ public boolean isPalindrome1(int x) { if (x<0) r ...

  4. WebService的简单Demo

    看到招聘要求要会WebService.就百度看看是如何实现的. 测试了一下.发现使用webservice开发方法,好像方便了不少.服务端开发者只需要关注服务端就可以了. Demo结构 IWebServ ...

  5. msf ms17-010利用笔记

    nmap -sV -Pn xxxxx  扫描端口and系统信息 use auxiliary/scanner/smb/smb_ms17_010   扫描模块 set Rhosts 扫描目标 use ex ...

  6. 多线程那点事—Parallel.for

    先看段代码: 1 for (int i = 0; i < 10; i++) 2 { 3 Task.Factory.StartNew(()=>Console.WriteLine($" ...

  7. 第一章节 BJROBOT ROS 网络配置及移动控制【ROS全开源阿克曼转向智能网联无人驾驶车】

    版权声明:该教程版权归北京智能佳科技有限公司所有,未经公司授权禁止引用.发布.转载等,否则将追究其法律责任. 使用前说明:本使用文档说明略微简明,请结合指导视频进行操作会更容易理解!! 第一章节 BJ ...

  8. mysql高并发解决方案

    mysql高并发的解决方法有: 优化SQL语句,优化数据库字段,加缓存,分区表,读写分离以及垂直拆分,解耦模块,水平切分等. 高并发大多的瓶颈在后台,在存储mysql的正常的优化方案如下: (1)代码 ...

  9. 卷积神经网络学习笔记——Siamese networks(孪生神经网络)

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 在整理这些知识点之前,我 ...

  10. 基于vue2.x的webpack升级与项目搭建指南--基础篇

    first thing fitrst 博主声明:绝对不当标题党 有人看最好不过的背景: 十月初对公司产品的前端构建做了一些优化,但还遗留了不少问题(可了解我的前一篇博文:一次webpack小规模优化经 ...