我的自定义下拉对象
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 CardType { get; set; }
public ComboBoxModel CardTypeSelected { get; set; }
前端页面
ItemsSource="{Binding DataContent.CardType}"
这里ObservableCollection
在这个对象列表中的每一个选项本身是一个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));
}