WPF C# 组合框空白 SelectedItem SelectedValue

Posted

技术标签:

【中文标题】WPF C# 组合框空白 SelectedItem SelectedValue【英文标题】:WPF C# Combobox blank SelectedItem SelectedValue 【发布时间】:2021-10-15 21:22:27 【问题描述】:

我正在使用 WPF/C# 中的组合框,我遇到的问题让我有些困惑。在组合框上,我有 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>

【问题讨论】:

嗨,我认为this answer 应该有助于您理解 SelectedValue/SelectedItem/SelectedValuePath。如果无法访问您的 VM 代码,很难知道,但我认为您应该只使用一种方法来设置您的选择:SelectedValue 或 SelectedItem 或 SelectedValuePath 但不能同时使用所有这些。 您的示例标记中的DataGrid 在哪里?它与已发布的ComboBox 有何关系? 【参考方案1】:

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

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

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

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

你的虚拟机会有这样的东西:

private Practice _mySelectedPractice;

public Practice SelectedPractice

    get => _selectedPractice;
    set => _selectedPractice = value;

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

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

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

【讨论】:

谢谢!蒂亚·米苏

以上是关于WPF C# 组合框空白 SelectedItem SelectedValue的主要内容,如果未能解决你的问题,请参考以下文章

列表框 WPF C# 中的 SelectedItem 事件

C# WPF - 组合框

MVVM WPF ComboBox SelectedItem 绑定未在数据网格内激活

UWP 组合框绑定到 SelectedItem 属性

在组合框中设置 SelectedItem

双向绑定到 WPF 中多个列表框上的 ListBox SelectedItem