为什么无法在组合框中选择空值?

2024-01-10

在 WPF 中,似乎不可能从组合框中选择(使用鼠标)“空”值。Edit澄清一下,这是 .NET 3.5 SP1。

这是一些代码来说明我的意思。首先,C# 声明:

public class Foo
{
    public Bar Bar { get; set; }
}

public class Bar 
{
    public string Name { get; set; }
}

接下来是我的 Window1 XAML:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <ComboBox x:Name="bars" 
                  DisplayMemberPath="Name" 
                  Height="21" 
                  SelectedItem="{Binding Bar}"
                  />
    </StackPanel>
</Window>

最后,我的 Window1 类:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        bars.ItemsSource = new ObservableCollection<Bar> 
        {
            null, 
            new Bar { Name = "Hello" }, 
            new Bar { Name = "World" } 
        };
        this.DataContext = new Foo();
    }
}

与我一起?我有一个 ComboBox,其项目绑定到 Bar 实例列表,其中一个为 null。我已将窗口绑定到 Foo 的实例,并且 ComboBox 正在显示其 Bar 属性的值。

当我运行此应用程序时,ComboBox 以空显示开始,因为 Foo.Bar 默认情况下为 null。没关系。如果我使用鼠标放下组合框并选择“Hello”项目,这也有效。但是,如果我尝试重新选择列表顶部的空项目,组合框将关闭并返回到其先前的值“Hello”!

使用箭头键选择空值可以按预期工作,并且以编程方式设置它也可以工作。只能用鼠标进行选择,不起作用。

我知道一个简单的解决方法是拥有一个代表 null 的 Bar 实例并通过 IValueConverter 运行它,但是有人可以解释为什么用鼠标选择 null 在 WPF 的 ComboBox 中不起作用吗?


好吧,我最近遇到了同样的问题null价值ComboBox。 我通过使用两个转换器解决了这个问题:

  1. For 项目来源属性:它取代null集合中的值由转换器参数内传递的任何值组成:

    class EnumerableNullReplaceConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var collection = (IEnumerable)value;
    
            return
                collection
                .Cast<object>()
                .Select(x => x ?? parameter)
                .ToArray();
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
    
  2. For 选定值属性:此属性的作用相同,但对于单个值并有两种方式:

    class NullReplaceConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value ?? parameter;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value.Equals(parameter) ? null : value;
        }
    }
    

使用示例:

<ComboBox 
    ItemsSource="{Binding MyValues, Converter={StaticResource EnumerableNullReplaceConverter}, ConverterParameter='(Empty)'}" 
    SelectedValue="{Binding SelectedMyValue, Converter={StaticResource NullReplaceConverter}, ConverterParameter='(Empty)'}"
    />

Result:

笔记: 如果您绑定到可观察集合那么您将丢失更改通知。而且你不想拥有超过一个null具有收藏价值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法在组合框中选择空值? 的相关文章

  • 如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

    我需要在 AvalonDock 2 0 中加载项目集合作为文档 这些对象继承自一个抽象类 我想根据哪个子类在文档中渲染一个框架 这是我的 XAML
  • 如何在 WPF 中实现虚线或点线边框?

    我有一个ListViewItem我正在申请Style到 我想把灰色虚线作为底部Border 我怎样才能在 WPF 中做到这一点 我只能看到纯色画笔 这在我们的应用程序中效果很好 允许我们使用真正的边框而不是乱用矩形
  • WPF DataGrid 绑定 DataGridCell 内容

    希望这将是一个非常简单的答案 我认为我只是没有看到众所周知的树木 我有一个 DataGridCell 样式 我想将单元格的内容绑定到图像的源属性 这是我目前使用的 XAML
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • 如何在Wpf中的用户控件中调用MahApps Metro对话框

    当我尝试调用 MahApps Metro 对话框时 我在传递值时遇到错误 在传递参数时调用对话框控制时我需要传递 Metrowindow 参数 但我需要在用户控件中调用它 下面是当我需要对话框控制时我将调用的方法 public async
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • 如何从代码隐藏访问ListBox动态创建的项目的属性?

    XAML
  • 如何在运行时添加到 TreeView 目录

    我有一个TreeView我想允许用户添加和删除子项目 在探索基本功能时 我使用button and a textbox添加此子项 当用户点击button a new TreeViewItem需要创建并设置为我的父项的子项TreeView与t
  • WPF 处理文本、图像和文件粘贴事件

    我正在开发一个 WPF 应用程序 我想捕获 RichTextBox 输入中的粘贴命令并处理粘贴的文件 为此 我使用以下回调
  • .NET / C# / WPF 项目的命名约定

    NET C WPF 项目广泛接受的命名约定是什么 Microsoft 有一篇关于命名约定的内容广泛的 MSDN 文章here http msdn microsoft com en us library ms229002 aspx
  • 如何枚举控件的所有依赖属性?

    我有一些 WPF 控件 例如 文本框 如何枚举该控件的所有依赖属性 如 XAML 编辑器所做的那样 不需要使用反射 恕我直言 这是一个坏主意 因为框架已经为此提供了实用程序类 但它们并不明显找到 以下是基于这篇文章的答案 枚举绑定 http
  • 如何在 WPF 应用程序上执行异步启动?

    我在异步等待方面相当落后 所以这可能是一个 duh 问题 我正在开发一个非常小的 UI 应用程序 它使用以下命令从系统托盘运行WPF 通知图标 http www codeproject com Articles 36468 WPF Noti
  • 如何以编程方式调用应用程序菜单?

    我有自定义样式的非矩形透明窗口
  • 是什么导致 WPF 打印机输出被光栅化?

    我在 WPF 中遇到了许多打印问题 其中正在打印的特定项目组合会突然触发打印机输出的光栅化 导致打印机输出丑陋且庞大 并可能导致打印每页需要 30 秒 我发现在控件上设置任何级别的不透明度之类的事情通常会触发此问题 我忘记了它还有什么作用
  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri

随机推荐

  • 右表中结果为空的内连接

    我有2张桌子 餐厅和订单 每个餐厅可以有很多订单 restaurants table id name orders table id restaurant id date 我需要找到在某个日期范围内没有订单的餐厅 在订单表中 我保存订单日期
  • 变量切换方向丢失

    我是安卓新手 我编写了几个程序并在手机上试用了它们 当我切换方向时 就像我的手机重新启动程序一样 我所有的变量都被重置 事实上 唯一没有重置的是编辑文本视图中的文本 这是什么原因造成的 我怎样才能阻止它 我尝试在谷歌和堆栈溢出上查看它 但我
  • CSS calc 在 Safari 和后备中不起作用

    我正在研究这个布局 它强烈依赖 CSS calc 来进行必要的计算 width webkit calc 50 20px width moz calc 50 20px width calc 50 20px 现在 我无法让它在 Safari 中
  • NHibernate、代理和平等

    我正在使用 NHibernate 3 3 1 并发现非常有趣的问题 在我的域模型中 我定义了两个类 Carriage 和 CarriageRequest 相互引用 因为延迟加载已打开 所以当我访问carriage CarriageReque
  • 在 .NET Core 中自动创建私钥、CSR 和最终签名证书的过程

    有人向我提供了中间证书 由根证书签名 及其密码 为了安全地连接到 SSL 端点 我需要提供签名证书 这是我所做的 创建私钥 使用该私钥创建 CSR 使用提供的中级证书对其进行签名 我使用 openssl 来完成这一切 它运行得非常完美 TL
  • 服务中的断点不起作用

    我正在尝试向在单独线程上运行的服务添加断点 无论我将断点放置在服务中的哪个位置 它们总是被忽略 我确信该服务正在运行 正如我所看到的Log e在日志猫中 我的调试模式也可以正确使用 因为应用程序主线程中的任何断点都可以工作 我错过了什么吗
  • 从 Django 内部调用时,Subprocess.Popen 与交互式程序一起挂起

    我编写了一个小型 Django 应用程序 它根据用户输入执行交互式程序并将输出作为结果返回 但由于某种原因 子进程挂起 在验证日志时 我发现必须给出 n 作为对挑战的响应的地方 该响应似乎从未做出过 有趣的是 如果我从 Django 外部运
  • Hibernate 锁定模式/锁定选项

    我正在浏览 Hibernate 文档并遇到了LockModes 这些是否与Isolation levels我们用于数据库 它们有何不同Isolation levels 我正在尝试一个简单的示例 并观察到当我使用 session load 方
  • 从 makefile 调用 flex

    我想调用 flex 来构建一个 l 文件 然后调用 gcc 来构建所有内容 I tryed comp lex scanner l gcc o a out main c hash c I error lex scanner l gcc o a
  • 如何开始黑莓编程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 编码文件路径

    net 中是否有内置方法可以像编码 url 一样对文件路径进行编码 例如 如果我的文件名中有非法字符 例如 whatever whatever 我希望它对 进行编码 这样它仍然存在 只是进行编码以便系统接受它 我想做类似的事情Path En
  • php,while()循环中的无限循环

    infinite loop x 1 while x 9 echo x x 我不明白背后的原因 为什么上面的代码会导致无限循环 在我看来 上面的代码应该输出 9 一次 但它输出无穷无尽的999999999 首先 当 x 等于 1 时 whil
  • Smack 的 FileTransferManager.createOutgoingFileTransfer 仅接受完整的 JID。如何在 Smack 中确定用户的完整 JID?

    经过几个小时的调试并试图找出为什么使用 aSmack 无法进行文件传输 而正常的消息传递却可以 我终于设法将其确定为这一点 当我按照 Smack 文档中给出的方法获取用户的名册列表时 Openfire 服务器发送的名册 JID 末尾缺少 C
  • 使用当前行值更新变量

    我正在尝试执行一项复杂的操作 其中我提取整列数据的总和 并从每行的总和中减去运行小计 我可以单独完成 Sum 和 Running Subtotal 的组成部分 用它来运行小计 sum UsageMetric over order by Ne
  • IE9、表格和显示:块

    对于我网站的低宽度移动版本 我切换了display某些的table tr td and th to block 让它们垂直堆叠 我使用此技术来允许宽表继续显示其所有内容 而不会溢出其容器之外 它在所有现代 5 种浏览器中都能完美运行 但在
  • 如何在 Android 中以最佳方式调整位图大小?

    假设我有一个六边形 如果我调整它的大小以在包含六边形网格的应用程序中使用它 bgPaint new Paint bgPaint setAntiAlias true bgPaint setDither true Bitmap coloredB
  • iOS - 如何使用 NIB 中的特定框架初始化自定义 UIView

    我想知道初始化自定义的最干净的方法是什么UIView具有特定的框架 The UIView是由一个设计的XIB file 这是我的实现 class CustomView UIView IBOutlet var outletLabel UILa
  • 为 Debian Lenny 编译 OpenCV 2.4.2

    为了保留问答方面 我在最新 v 2 4 2 OpenCV 版本中遇到了一个奇怪的问题 安装失败并出现以下错误 在 OpenCV 2 4 2 modules core src system cpp 460 包含的文件中 OpenCV 2 4
  • 如何告诉 CMake 在 Windows 上使用 Clang?

    我有一个使用 CMake 构建的 C 项目 我通常在 OSX 上构建 但现在我正在尝试让 Windows 版本也能工作 出于兼容性原因 我想在 Windows 上使用 Clang 我从 LLVM 安装了预编译的 Clang 3 8 二进制文
  • 为什么无法在组合框中选择空值?

    在 WPF 中 似乎不可能从组合框中选择 使用鼠标 空 值 Edit澄清一下 这是 NET 3 5 SP1 这是一些代码来说明我的意思 首先 C 声明 public class Foo public Bar Bar get set publ