我有一个Datagrid,双击所选行后,将启动一个编辑屏幕.
在此编辑屏幕上,有组合框,其值绑定到网格中的选定行.
有时,组合框中没有分配给组合框的值,因此组合框中的显示为空,但该值不为空.
如果itemsource集合中不存在该值,如何更新所选项目的值为null.
在此编辑屏幕上,有组合框,其值绑定到网格中的选定行.
有时,组合框中没有分配给组合框的值,因此组合框中的显示为空,但该值不为空.
如果itemsource集合中不存在该值,如何更新所选项目的值为null.
在上面的场景中,自第二个屏幕绑定到第一个屏幕上的Selected项目时,City的SelectedValue为“洛杉矶”,显示为空.
但由于集合中不存在“洛杉矶”,因此SelectedValue应为null.
解决方法
解决方案是将组合框的ItemsSource设置为列表(例如:“DeviceNameList”),并将此组合框的SelectedItem设置为与列表中的元素类型(SelectedDeviceName)匹配的变量.
现在,当您加载编辑屏幕时,它会将列表绑定到组合框并显示您设置的变量.
您必须编写一些代码来检查所选项是否出现在列表中,如果不是,则可以将值设置为零.
例:
XAML代码:
<ComboBox ItemsSource="{Binding Path=DeviceNameList}" SelectedItem="{Binding Path=SelectedDeviceName}" />
用于设置selectedItem的代码:
/// <summary> /// Gets or sets SelectedDeviceName. /// </summary> public ObservableCollection<string> DeviceNameList { get { return mDeviceNameList; } set { mDeviceNameList = value; } } /// <summary> /// Gets or sets SelectedDeviceName. /// </summary> public string SelectedDeviceName { get { return mSelectedDeviceName; } set { mSelectedDeviceName = value; NotifyPropertyChanged("SelectedDeviceName"); } } /// <summary> /// Event PropertyChanged /// </summary> public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// Function NotifyPropertyChanged /// </summary> /// <param name="property"> /// The property. /// </param> private void NotifyPropertyChanged(string property) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(property)); } }