当数据可用时,Combobox会自动选择第一项

时间:2011-09-29 23:47:49

标签: c# wpf xaml

我正在寻找在数据可用时选择第一项的方法。但如果源中没有数据,则不要选择。怎么做 ?我是WPF的新手。

<ComboBox Grid.Row="5" Grid.Column="1"
          IsEditable="False"
          ItemsSource="{Binding Source={x:Static l:DirectXResolution.Resolutions}}"
          ToolTip="Resolutions">
    <ComboBox.Resources>
        <l:ResolutionConverter x:Key="resolutionConverter"/>
    </ComboBox.Resources>
    <ComboBox.Text>
        <MultiBinding Converter="{StaticResource resolutionConverter}">
            <Binding Path="GameWidth" Mode="OneWayToSource"/>
            <Binding Path="GameHeight" Mode="OneWayToSource"/>
        </MultiBinding>
    </ComboBox.Text>
</ComboBox>

3 个答案:

答案 0 :(得分:22)

最简单的方法是使用SelectedIndex。请检查下面的代码。

<ComboBox Grid.Row="5" Grid.Column="1"
          IsEditable="False"
          ItemsSource="{Binding Source={x:Static l:DirectXResolution.Resolutions}}"
          ToolTip="Resolutions"
          SelectedIndex="0">
....

答案 1 :(得分:1)

DirectXResolution.Resolutions必须为ObservableCollection<T>,否则当数据可用时,您的ComboBox将不会更新。您可以使用CollectionChanged ObservableCollection<T>事件来选择第一项。

如果DirectXResolution.Resolutions不是ObservableCollection,请为此集合创建一个包装并继承INotifyCollectionChanged

答案 2 :(得分:0)

以下是如何在代码中执行此操作:

Items.CollectionChanged += (sender, e) =>
{
    if (!Items.Contains(Selected))
    {
        Selected = Items.FirstOrDefault();
    }
};

Items是可以更新的ObservableCollectionSelected是所选项目的双向属性。此代码应放在视图模型的构造函数中。