微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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));
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐