WPF C# 组合框空白 SelectedItem SelectedValue

WPF C# Combobox blank SelectedItem SelectedValue

我正在使用 WPF/C# 中的组合框,我遇到了一个让我有点困惑的问题。在 combobox 上,我有 SelectedValue 将值 (TaxID) 传递给 VM 上的对象,另外,我有 SelectedItem 将所选对象从组合框传递到 VM 上的 属性。 当我从数据网格打开记录进行编辑时,SelectedItem 导致组合框为空,它没有加载存储在数据库中的值。删除 SelectedItem 属性 后,组合框会在打开时正确加载以进行编辑。我需要将所选对象从组合框传递到 VM 上的 属性,非常感谢任何帮助!

    <ComboBox x:Name="cboPractice" 
    ItemsSource="{Binding Path=PracticesList}"
    DisplayMemberPath="TaxName"
    SelectedValuePath="TaxID"
    SelectedValue="{Binding Path=SiteVisitScheduleCurrent.TaxID, 
                                 UpdateSourceTrigger=PropertyChanged}"
    SelectedItem="{Binding Path=SelectedPractice, UpdateSourceTrigger=PropertyChanged}"
    >
   <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
             <i:InvokeCommandAction Command="{Binding Path=PracticeSelectionChangedCommand}"
                                    CommandParameter="{Binding ElementName=cboPractice, 
                                                      Path=SelectedItem.TaxID}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

SelectedValue/SelectedValuePath 和 SelectedItem 属性不能同时使用。

SelectedValue 和 SelectedValuePath 将在您绑定到对象集合但您想要return您要绑定到的特定属性 个对象而不是整个对象时使用。

我建议删除 SelectedValue 和 SelectedValuePath 绑定,只依赖 SelectedItem 绑定。您不需要 SelectionChanged 事件的 InteractionTrigger。

<ComboBox ItemsSource="{Binding Path=PracticesList}"
          DisplayMemberPath="TaxName"
          SelectedItem="{Binding Path=SelectedPractice}" />

你的 VM 应该是这样的:

private Practice _mySelectedPractice;

public Practice SelectedPractice
{
    get => _selectedPractice;
    set => _selectedPractice = value;
}

当 ComboBox 选择发生变化时,您的 SelectedItem 将在您的 VM 的 SelectedPractice 中更新 属性。

在您的 VM 的 SelectedPractice setter 中,您可以选择在选择更改时执行您需要执行的任何其他操作。

这是另一篇解释 SelectedItem 与 SelectedValue 和 SelectedValuePath 的文章:Difference between SelectedItem, SelectedValue and SelectedValuePath