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 @ 的 ItemsSource
到 IEnumerable<NameOfModel>
(而不是使用 ComboBoxItem
)和 SelectedItem
应该绑定到类型 NameOfModel
... NameOfModel
的实例也应该能够将其与其他实例进行比较
@Sandra:PropertyName
是什么类型,window2 的DataContext
是什么?
d:DataContext
只是 Visual Studio 设计师的东西。运行应用程序时它没有效果。你看到我的回答了吗?
【参考方案1】:
您应该将所选ComboBoxItem
的Content
绑定到源属性。为此,您应该将 绑定到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">
但 SelectedItem 是 ComboBoxItem 类型。
你想要SelectedValue="Binding PropertyName">
您可以改为绑定到 ComboBox.Text:
Text="Binding PropertyName, Mode=OneWayToSource" >
【讨论】:
感谢您澄清这一点。改了之后还是不显示。由于我使用 ComboBoxItems 会出现问题吗?我宁愿不做 Selvin 建议的变通方法,因为我宁愿在 XAML 中硬编码这些值,而不是为它们创建新的列表或集合。 是的,你是对的。 SelectedValue 仍然是一个 ComboBoxItem。我会试试看。 再次感谢您!我相信我需要添加更多上下文,所以我更新了我的问题。请,如果你不介意,看看:-)以上是关于WPF:为啥我的 ComboBox SelectedItem 不显示?的主要内容,如果未能解决你的问题,请参考以下文章
WPF ComboBox SelectedItem 在 TabControl 开关上设置为 Null