首页 > 解决方案 > 在 wpf 中绑定 Combobox 的 SelectedItem

问题描述

我浏览了很多关于这个主题的文章,但到目前为止,没有人提出适合我的解决方案。

我正在使用在本网站的另一篇文章中找到的 FilteredComboBox(基于文本输入的 WPF 组合框的动态过滤器, YantingChen 的固定版本)。我正试图让它与我的代码一起工作。

我有一个视图模型,它在打开视图时执行以下代码:

Object = _context.ObjectReader.GetObjectById(i); //returns an object with property Prop, that is of type Item
Items = _context.ItemReader.GetAllItems(); //returns an ObservableCollection<Item>. Item has a property Name
RaisePropertyChanged(nameof(Object));
RaisePropertyChanged(nameof(Items));

我的 xaml 将此用于 FilteredComboBox:

<local:FilteredComboBox ItemsSource="{Binding Items}"
                        SelectedItem="{Binding Object.Prop}"
                        DisplayMemberPath="Name"
                        Width="200">
    <local:FilteredComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel VirtualizationMode="Recycling"/>
        </ItemsPanelTemplate>
    </local:FilteredComboBox.ItemsPanel>
</local:FilteredComboBox>

我想要完成的是组合框在打开视图时显示 Object.Prop 的当前值,但在当前设置中不会发生这种情况。根据我通过谷歌搜索这个问题所收集到的信息,绑定到组合框的 SelectedItem 会遇到一些奇怪的困难,但我希望这里的人能够指出我正确的方向。

我尝试了以下方法:

<local:FilteredComboBox ItemsSource="{Binding Items}"
                        SelectedItem="{Binding Object.Prop}"
                        SelectedValue="{Binding Object.Prop.Name}"
                        DisplayMemberPath="Name"
                        Width="200">
    <local:FilteredComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel VirtualizationMode="Recycling"/>
        </ItemsPanelTemplate>
    </local:FilteredComboBox.ItemsPanel>
</local:FilteredComboBox>

这几乎似乎工作,除了它以某种方式将选择设置为项目源中的错误项目。

标签: c#wpfcomboboxbinding

解决方案


推荐阅读