c# - 防止 ComboBox 在不在绑定(bind)列表中时将 selectedValue 设置为 null

标签 c# wpf xaml .net-4.0

我不太确定如何处理这个问题。我正在使用一堆带有值下拉列表的组合框,我们也允许用户设置属性。 (即货币 =“美元、加元、欧元”)。

有时,当我们加载数据时,我们会发现货币不在我们的列表中,例如“AUD”。在这种情况下,我们仍然希望组合框显示加载的值,并且当前选择的货币应保持为“澳元”,除非用户选择更改它,在这种情况下,他们唯一的选择仍然是“美元、加元、欧元”。

我的问题是,一旦控件变得可见,ComboBox 就会调用我的 SelectedCurrency 属性的 setter 并将其设置为 null,大概是因为当前值“AUD”不在这是 list 。如何在不让用户在“货币”字段中键入他们想要的任何内容的情况下禁用此行为?

最佳答案

IsEditable="True"IsReadOnly="True" 和您的 SelectedItem 设置为您想要保存所选对象的任何对象项目

<ComboBox ItemsSource="{Binding SomeCollection}"
          Text="{Binding CurrentValue}"
          SelectedItem="{Binding SelectedItem}"
          IsEditable="True"
          IsReadOnly="True">

IsEditable 允许 Text 属性显示不在列表中的值

IsReadOnly 使 Text 属性不可编辑

SelectedItem 存储选中的项目。在用户选择列表中的项目之前它将为 null,因此在您的 SaveCommand 中,如果 SelectedItem == null 则使用 保存到数据库时使用 CurrentValue 而不是 SelectedItem

关于c# - 防止 ComboBox 在不在绑定(bind)列表中时将 selectedValue 设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738300/

相关文章:

c# - Criteria 可以返回 Dictionary 而不是 List<DTO> 吗?

c# - 如何使用转换器将可观察集合绑定(bind)到 Canvas

wpf - wpf 中的自定义 Chrome Windows

c# - 如何在 Windows Phone 8 中始终显示数字键盘?

c# - Silverlight DependencyProperty问题

c# - 如何通过 p/invoke 将 C# 字符串传递给 linux/glibc wchar_t * 参数?

c# - 在 DLL 中实例化插件类

c# - 在 WPF MVVM 中,我是否有必要将所有要从模型绑定(bind)的属性包装为依赖属性?

WPF、MVVM 和异步工作

wpf - 调用线程必须是STA,因为很多UI组件都需要这个