WPF:为什么我的 ComboBox SelectedItem 不显示?

WPF: Why doesn't my ComboBox SelectedItem show?

(此问题已更新)

我有:

我的问题:

当我打开 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 中的每个对象(几个 TextBoxes - 这些工作正常,一个 ComboBox - 确实不行!)。 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}"(..a shot in the dark),这只是添加了一个项目,分为三个(E,P,F),但其中 none 设置为 SelectedItem.

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

你有SelectedItem="{Binding PropertyName}">

但是 SelectedItem 的类型是 ComboBoxItem。

你想要SelectedValue="{Binding PropertyName}">

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

 Text="{Binding PropertyName, Mode=OneWayToSource}" >

您应该将所选 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>