当数据可用时,组合框自动选择第一项

本文关键字:选择 一项 数据 组合 | 更新日期: 2023-09-27 18:10:09

我正在寻找选择数据可用时的第一项的方法。但如果源中没有数据,则不选择。怎么做呢?我对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>

当数据可用时,组合框自动选择第一项

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

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

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

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

在代码中是这样做的:

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

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