我正在使用带有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>
内。
EDIT2:
显示问题所在的图片:
EDIT3:
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()
答案 0 :(得分:6)
由于您在构建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;
}