WPF C# Combobox blank SelectedItem SelectedValue



我正在WPF/c#中使用一个组合框,我遇到了一个问题,这对我来说有点困惑。在组合框上,我有SelectedValue,它将值(TaxID)传递给VM上的对象,还有SelectedItem,它将选择的对象从组合框传递给VM上的一个属性。当我从数据网格打开一条记录进行编辑时,SelectedItem导致组合框为空白,它没有加载存储在db中的值。删除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将在你绑定到一个对象集合时使用,但是你想要返回你要绑定到的对象的特定属性,而不是整个对象。

我建议删除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设置中,你可以选择在选择改变时做任何你需要做的事情。

这是另一篇解释SelectedItem与SelectedValue和SelectedValuePath的文章:SelectedItem, SelectedValue和SelectedValuePath的区别

最新更新