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
我正在使用 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