WPF:为啥我的 ComboBox SelectedItem 不显示?

Posted

技术标签:

【中文标题】WPF:为啥我的 ComboBox SelectedItem 不显示?【英文标题】:WPF: Why doesn't my ComboBox SelectedItem show?WPF:为什么我的 ComboBox SelectedItem 不显示? 【发布时间】:2021-10-13 02:14:48 【问题描述】:

(此问题已更新)

我有:

Window1 - 带有DataGrid Window2 - 我在其中创建新的 DataGrid 行 Window3 - 我打开DataGrid 行作为配置文件以查看其 内容

我的问题:

当我打开 Window3 时,ComboBox 不显示我在 Window2 中选择的项目

Window2中的ComboBox是这样绑定的:

<ComboBox
      Text="Binding PropertyName, UpdateSourceTrigger=PropertyChanged">
         <ComboBoxItem Content="AS">
         </ComboBoxItem>
         <ComboBoxItem Content="ASA">
         </ComboBoxItem>
         <ComboBoxItem Content="ANS">
         </ComboBoxItem>
         <ComboBoxItem Content="EPF">
         </ComboBoxItem>
</ComboBox>

我宁愿保持这种状态,只是在项目中硬编码,因为它们可能不会再有了。

当我保存它时,我转到 Window1,然后打开我刚刚保存的行。

DataGrid SelectedItem 受属性(名为“Selected”)的约束,该属性与 Window3 中的每个对象(几个文本框 - 这些工作正常,一个组合框 - 不起作用!)。 ComboBox 存储了我需要的数据,但没有将我之前的选择显示为SelectedItem

Window3中的ComboBox是这样绑定的:

<ComboBox
       DataContext="Binding Path=(viewmodel:LicenseHolderViewModel.Selected)"
       Text="Binding PropertyName, UpdateSourceTrigger=PropertyChanged">
         <ComboBoxItem Content="AS">
         </ComboBoxItem>
         <ComboBoxItem Content="ASA">
         </ComboBoxItem>
         <ComboBoxItem Content="ANS">
         </ComboBoxItem>
         <ComboBoxItem Content="EPF">
         </ComboBoxItem>
</ComboBox>

因此,项目显示在 ComboBox 中,但默认情况下没有选择任何内容。 如果我从 XAML 中删除 ComboBoxItem,则 ComboBox 只是空的(自然)。 我尝试添加ItemsSource="Binding PropertyName"(..在黑暗中拍摄),这只是添加了一个项目,分为三个(E、P、F),但没有一个设置为SelectedItem

可能值得注意的是,我的框架会自动将视图与视图模型耦合,并且我必须将另一个 ViewModels 属性设置为每个对象 DataContext,这可能会导致一些问题? (我尝试对此进行测试,但我无法确认是否是这种情况)。

【问题讨论】:

我做错了什么?您假设string 可以自动转换为NameOfModel ...明显的解决方案...您应该绑定@987654334 @ 的 ItemsSourceIEnumerable&lt;NameOfModel&gt; (而不是使用 ComboBoxItem )和 SelectedItem 应该绑定到类型 NameOfModel ... NameOfModel 的实例也应该能够将其与其他实例进行比较 @Sandra:PropertyName 是什么类型,window2 的DataContext 是什么? d:DataContext 只是 Visual Studio 设计师的东西。运行应用程序时它没有效果。你看到我的回答了吗? 【参考方案1】:

您应该将所选ComboBoxItemContent 绑定到源属性。为此,您应该将 绑定到SelectedValue 属性并设置SelectedValuePath 属性:

<ComboBox
       SelectedValue="Binding PropertyName, UpdateSourceTrigger=PropertyChanged"
       SelectedValuePath="Content">
    <ComboBoxItem Content="AS">
    </ComboBoxItem>
    <ComboBoxItem Content="ASA">
    </ComboBoxItem>
    <ComboBoxItem Content="ANS">
    </ComboBoxItem>
    <ComboBoxItem Content="EPF">
    </ComboBoxItem>
</ComboBox>

【讨论】:

谢谢!!!!我按照您对两个组合框的建议进行了更改,现在可以使用了!内啡肽现在开始释放了,哈哈。该死的组合框!【参考方案2】:

你有SelectedItem="Binding PropertyName"&gt;

但 SelectedItem 是 ComboBoxItem 类型。

你想要SelectedValue="Binding PropertyName"&gt;

您可以改为绑定到 ComboBox.Text:

 Text="Binding PropertyName, Mode=OneWayToSource" >

【讨论】:

感谢您澄清这一点。改了之后还是不显示。由于我使用 ComboBoxItems 会出现问题吗?我宁愿不做 Selvin 建议的变通方法,因为我宁愿在 XAML 中硬编码这些值,而不是为它们创建新的列表或集合。 是的,你是对的。 SelectedValue 仍然是一个 ComboBoxItem。我会试试看。 再次感谢您!我相信我需要添加更多上下文,所以我更新了我的问题。请,如果你不介意,看看:-)

以上是关于WPF:为啥我的 ComboBox SelectedItem 不显示?的主要内容,如果未能解决你的问题,请参考以下文章

WPF绑定基于属性的Combobox项

WPF 将集合绑定到 ComboBox 并选择一个项目

WPF combobox selectedItem的问题

WPF ComboBox SelectedItem 在 TabControl 开关上设置为 Null

如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?

WPF Datagrid Combobox SelectedItem 未正确绑定到 Powershell 对象