WPF:使用selecteditem设置的ComboBox不使用SelectedIndex = 0?

时间:2010-06-02 19:52:40

标签: wpf combobox selecteditem selectedindex

为什么我的组合框弹出菜单中的第一个元素未显示在

的所选项目区域中

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

相同的代码selectitem + 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,因为它应该真的有用。

1 个答案:

答案 0 :(得分:2)

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

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