首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ComboBox与CompositeCollection - SelectedIndex不粘

WPF ComboBox与CompositeCollection - SelectedIndex不粘
EN

Stack Overflow用户
提问于 2013-08-21 18:00:29
回答 1查看 8.2K关注 0票数 5

我使用的是ComboBox和CompositeCollection,如下所示:

代码语言:javascript
复制
<ComboBox>
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="All"></ComboBoxItem>
            <CollectionContainer Collection="{Binding Source={StaticResource AllBitsSource}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

所显示的数据与预期完全相同,只有我现在希望将默认的索引/值/项设置为ComboBoxItem的索引/值/项,并且存在一些问题。

如果我设置:

代码语言:javascript
复制
<ComboBoxItem Content="All" IsSelected="True"/>

这就完全被忽视了。

我还试着做:

代码语言:javascript
复制
<ComboBox SelectedIndex="0">

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

如何解决这个问题,以便使我的ComboBoxItem内容在绑定后保持选中?

编辑:

我刚刚尝试用另一个<ComboBoxItem>替换我的<ComboBoxItem>,虽然它们仍然在<CompositeCollection>中,但它的工作方式很好。

EDIT2:

显示问题所在的图像:

EDIT3:

AllBitsSource的代码:

XAML:

代码语言:javascript
复制
<Window.Resources>
    <CollectionViewSource x:Key="AllBitsSource" Source="{Binding Path=AllBits}" />

代码背后:

代码语言:javascript
复制
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()上被调用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 18:59:40

由于在构建ComboBox之后要添加到集合中,所以您可能必须访问加载的事件并在那里设置您的SelectedIndex .

代码语言:javascript
复制
<ComboBox Loaded="ComboBox_Loaded">
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="All" />
            <CollectionContainer Collection="{Binding Source={StaticResource AllBitsSource}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

代码背后:

代码语言:javascript
复制
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    (sender as ComboBox).SelectedIndex = 0;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18364557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档