Comboxbox автоматически выбирает первый элемент, когда доступны данные

Я ищу способ выбора первого элемента, когда данные стали доступными. Но если в источнике нет данных, не выбирайте. Как это сделать? Я очень новичок в 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>

Ответ 1

Самый простой способ - использовать SelectedIndex. Пожалуйста, проверьте код ниже.

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

Ответ 2

DirectXResolution.Resolutions должен быть ObservableCollection<T>, иначе ваш ComboBox не будет обновляться, когда данные станут доступными. Вы можете использовать CollectionChanged событие ObservableCollection<T>, чтобы выбрать первый элемент.

Если DirectXResolution.Resolutions не ObservableCollection, создайте оболочку для этой коллекции и наследуйте INotifyCollectionChanged

Ответ 3

Вот как это сделать в коде:

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

Items - это ObservableCollection, который может быть обновлен. Selected является двухсторонним свойством выбранного элемента. Этот код должен быть помещен в конструктор вашей модели представления.