关于mvvm的ComboBox绑定SelectedValue值不正确问题
2017-10-13 19:20
417 查看
我的自定义下拉对象
前端页面
<ComboBox Grid.Row="3" Grid.Column="4"
VerticalAlignment="Center" VerticalContentAlignment="Center"
ItemsSource="{Binding DataContent.CardType}"
DisplayMemberPath="SelectedValue"
SelectedValuePath="SelectedValue"
SelectedIndex="{Binding DataContent.CardTypeSelected.SelectedIndex,Mode=TwoWay}"
SelectedValue="{Binding DataContent.CardTypeSelected.SelectedValue,Mode=TwoWay}"
/>
我的ItemsSource绑定的是一个ComboBoxModel类型的对象列表,就是要告诉页面我的下拉菜单里每个选项是什么内容
ItemsSource="{Binding DataContent.CardType}"
这里ObservableCollection<ComboBoxModel>和List<ComboBoxModel>意义相同,但是在MVVM里前者可与页面绑定互动,所以尽量用前者
在这个对象列表中的每一个选项本身是一个ComboBoxModel类型,且有两个属性:
SelectedIndex
SelectedValue
所以我需要明确告诉前端页面我显示的路径是哪里,选中参数的存储路径又是哪里
DisplayMemberPath="SelectedValue" //显示成员的路径
SelectedValuePath="SelectedValue"//选中参数的路径
所以在指定这两项后,前端下拉菜单才能正确的显示ItemsSource的内容
如果不设置这两个路径,前端页面就不知道这个自定义ComboBoxModel对象究竟要显示什么,很大可能性你得到的一个结果就是一长串ComboBoxModel的类型描述字符串
然后就可以绑定具体的接收SelectedIndex和SelectedValue的参数了,例如:
SelectedIndex="{Binding DataContent.CardTypeSelected.SelectedIndex,Mode=TwoWay}"
SelectedValue="{Binding DataContent.CardTypeSelected.SelectedValue,Mode=TwoWay}"
因为设置了TwoWay,所以若你的上下文DataContent实现双工接口的情况下就可以在后端更新前端数据了
上面代码是DataContent的双工接口举例
public class ComboBoxModel { //基础属性 public int SelectedIndex { get; set; } public string SelectedValue { get; set; } //附加属性 public string ImagePath { get; set; } public bool IsSelected { get; set; } //码表属性 public int Id { get; set; } public int SortNumber { get; set; } public int NodeKey { get; set; } public string NodeCode { get; set; } public string NodeName { get; set; } //构造函数 public ComboBoxModel() { SelectedIndex = 0; SelectedValue = null; } public ComboBoxModel(int index, string value) { SelectedIndex = index; SelectedValue = value; } }在viewModel中的绑定参数
public ObservableCollection<ComboBoxModel> CardType { get; set; } public ComboBoxModel CardTypeSelected { get; set; }
前端页面
<ComboBox Grid.Row="3" Grid.Column="4"
VerticalAlignment="Center" VerticalContentAlignment="Center"
ItemsSource="{Binding DataContent.CardType}"
DisplayMemberPath="SelectedValue"
SelectedValuePath="SelectedValue"
SelectedIndex="{Binding DataContent.CardTypeSelected.SelectedIndex,Mode=TwoWay}"
SelectedValue="{Binding DataContent.CardTypeSelected.SelectedValue,Mode=TwoWay}"
/>
我的ItemsSource绑定的是一个ComboBoxModel类型的对象列表,就是要告诉页面我的下拉菜单里每个选项是什么内容
ItemsSource="{Binding DataContent.CardType}"
这里ObservableCollection<ComboBoxModel>和List<ComboBoxModel>意义相同,但是在MVVM里前者可与页面绑定互动,所以尽量用前者
在这个对象列表中的每一个选项本身是一个ComboBoxModel类型,且有两个属性:
SelectedIndex
SelectedValue
所以我需要明确告诉前端页面我显示的路径是哪里,选中参数的存储路径又是哪里
DisplayMemberPath="SelectedValue" //显示成员的路径
SelectedValuePath="SelectedValue"//选中参数的路径
所以在指定这两项后,前端下拉菜单才能正确的显示ItemsSource的内容
如果不设置这两个路径,前端页面就不知道这个自定义ComboBoxModel对象究竟要显示什么,很大可能性你得到的一个结果就是一长串ComboBoxModel的类型描述字符串
然后就可以绑定具体的接收SelectedIndex和SelectedValue的参数了,例如:
SelectedIndex="{Binding DataContent.CardTypeSelected.SelectedIndex,Mode=TwoWay}"
SelectedValue="{Binding DataContent.CardTypeSelected.SelectedValue,Mode=TwoWay}"
因为设置了TwoWay,所以若你的上下文DataContent实现双工接口的情况下就可以在后端更新前端数据了
public class ShowDialogEmployeeModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnChangedProperties(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
上面代码是DataContent的双工接口举例
相关文章推荐
- Mvvm combobox绑定Dictionary<Key,Value>问题
- CombBox 的selectedvalue 的第一次绑定时的问题
- 关于.net winform ComboBox数据绑定显示问题
- 关于DataGridViewComboBoxColumn的进阶绑定问题
- 针对PHPCMS绑定二级域名地址不正确问题分析
- 信息系统开发平台OpenExpressApp - 如何解决ComboBox.TextProperty绑定带来问题的来龙去脉
- 关于Silverlight对匿名类型数据绑定的问题及其解决方法
- 关于标签onclick方法失效,或jquery绑定事件失效的问题
- jquery easyui关于datagrid新增一行 combobox 默认选中第一项问题
- 关于Repeater嵌套绑定的问题
- DataGridComboBoxColumn绑定后显示空白的问题
- Combobox数据绑定的问题
- C# WinForm 中ComboBox数据绑定的问题 (转)
- 关于mysql的java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\xBD\xF0\x9F…'问题
- v-model绑定后设置selected问题
- 关于easyUI tree控件后台数据绑定问题
- 关于Flex中用大括号{}进行数据绑定遇到的问题
- 关于scanf()不能正确接收有空格符的字符串的问题
- 关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位