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

10

我正在寻找一种方法,在数据可用时选择第一项。但是如果源中没有数据,则不要进行选择。怎样做?我对WPF非常陌生。

我想在数据可用时选择第一个项目,如果源中没有数据,则不进行选择。我对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>

在Itemssource(Resolutions)中是否有任何类型的更改通知可用? - RQDQ
项目源是一个 List<string>。不确定它是否具有变更通知功能。如何添加变更通知? - dan_l
3个回答

22

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

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

8
如果重新填充项列表,则需要将IsSynchronizedWithCurrentItem设置为“true”,否则它不会自动选择第一个索引。原文并非完全正确。 - user384080

1

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

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


0

以下是如何在代码中实现:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接