2011-09-29 93 views
10

我正在寻找在数据可用时选择第一个项目的方法。但如果源中没有数据,则不要选择。怎么做 ?我对WPF很陌生。当数据可用时,Comboxbox自动选择第一个项目

<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> 
+0

是否有任何种类的Itemssource(Resolutions)可用的更改通知? – RQDQ

+0

该商品来源仅限于列表。不知道它是否有更改通知。如何添加更改通知? –

回答

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将不会被更新。您可以使用CollectionChanged事件ObservableCollection<T>选择第一个项目。

如果DirectXResolution.ResolutionsObservableCollection,创建这个集合的包装和继承INotifyCollectionChanged

0

这里是如何做到这一点的代码:

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

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

相关问题