【问题标题】:WPF: ComboBox with selecteditem set make not use of SelectedIndex=0?WPF:带有选定项集的组合框不使用 SelectedIndex=0?
【发布时间】:2011-02-27 00:21:24
【问题描述】:

为什么我的组合框弹出菜单中的第一个元素没有显示在所选项目区域中

我的组合框,当我使用 SelectedItem 绑定时?没有它就出现了??使用

同样的代码selecteditem + selectedindex 没问题!

<ComboBox
        ItemsSource="{Binding SchoolclassSubjectViewModels}"
        SelectedItem="{Binding SelectedSchoolclassSubjectViewModel}"   
        SelectedIndex="0"
        Height="23"
        HorizontalAlignment="Left"
        Margin="375,13,0,0"
        VerticalAlignment="Top"
        Width="151">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding SchoolclassName}" />
                    <TextBlock Text=" " />
                    <TextBlock Text="{Binding SubjectName}" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

以及我使用的解决方法:

SchoolclassSubjectViewModels.Add(schoolclassSubjectVM);
        SelectedSchoolclassSubjectViewModel = schoolclassSubjectVM;

还有这个:

SelectedItem="{Binding SelectedSchoolclassSubjectViewModel,Mode=TwoWay}"

但我更喜欢只有 xaml 的方式,因为它应该真的可以工作。

【问题讨论】:

    标签: wpf combobox selecteditem selectedindex


    【解决方案1】:

    这是因为 ItemsSource 集合中的引用与 SelectedItem 属性中的引用不同。我冒昧地猜测您正在使用一个对象上下文来查询您的数据库以获取ItemsSource 绑定到的SchoolclassSubject 对象列表,但是另一个上下文来查询您绑定到SelectedItem 的实际数据项.即使列表包含一个代表对象所持有值的引用,它实际上并不是相同的引用,而是相同数据的单独实例。

    有很多方法可以解决这个问题,其中大多数涉及使用SelectedValuePathSelectedValue 而不是SelectedItem 属性,但具体解决方案会因您的特定ORM 而异。

    【讨论】:

    • 我使用带有 sql pure no ORM 的 sqlite 数据库。第一段听起来令人困惑 XD。你说的可能不是真的......,因为我刚刚在我的代码中发现: viewmodel 中的绑定与上述代码中的模式相同。不同的是我没有专门定义的ComboBox itemtemplate。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多