5

我正在使用带有 CompositeCollection 的 ComboBox,如下所示:

<ComboBox>
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="All"></ComboBoxItem>
            <CollectionContainer Collection="{Binding Source={StaticResource AllBitsSource}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

显示的数据完全符合预期,只是我现在想将默认索引/值/项目设置为内容为 All 的 ComboBoxItem 的值,并且遇到了一些问题。

如果我设置:

<ComboBoxItem Content="All" IsSelected="True"/>

这被完全忽略了。

我也尝试过:

<ComboBox SelectedIndex="0">

虽然这确实选择了 All 值,但当我打开下拉列表时,突出显示的值是加载到 ComboBox 上的最后一个值,而不是 All 值。

如何解决此问题,以便我的 ComboBoxItem 内容在数据绑定后保持选中状态?

编辑:

我刚刚尝试用<CollectionContainer>另一个替换我的<ComboBoxItem>并且它工作正常,即使它们仍然在<CompositeCollection>.

编辑2:

显示问题所在的图像:

图片

编辑3:

AllBitsSource 的代码:

XAML:

<Window.Resources>
    <CollectionViewSource x:Key="AllBitsSource" Source="{Binding Path=AllBits}" />

后面的代码:

private readonly ObservableCollection<string> _bits = new ObservableCollection<string>();

private void GetCurrentSettings()
{
    setttings = display.GetDisplaySettings();

    foreach (var mode in setttings)
    {
        var displaySettingInfoArray = mode.GetInfoArray();

        if (_bits.Contains(displaySettingInfoArray[4]) == false)
        {
            _bits.Add(displaySettingInfoArray[4]);
        }
    }
}

public ObservableCollection<string> AllBits
{
    get { return _bits; }
}

GetCurrentSettings()被调用Main()

4

1 回答 1

8

由于您是在构造 ComboBox 之后添加到您的 Collection 中,因此您可能必须深入到 Loaded 事件并在那里设置您的 SelectedIndex ...

<ComboBox Loaded="ComboBox_Loaded">
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="All" />
            <CollectionContainer Collection="{Binding Source={StaticResource AllBitsSource}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

后面的代码:

private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    (sender as ComboBox).SelectedIndex = 0;
}
于 2013-08-21T18:59:40.907 回答