c# – 如果itemsource中不存在值,则Combobox指定null

我有一个Datagrid,双击所选行后,将启动一个编辑屏幕.
在此编辑屏幕上,有组合框,其值绑定到网格中的选定行.
有时,组合框中没有分配给组合框的值,因此组合框中的显示为空,但该值不为空.
如果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));
        }
    }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...