2011-09-29 7 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

アイテムソースはList です。変更通知があるかどうかは不明です。変更通知を追加するには? –

答えて

22

最も簡単な方法は、SelectedIndexを使用することです。以下のコードを確認してください。

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

完全には正しくありません.ItSynchronizedWithCurrentItem = "true"を設定する必要があります。そうでない場合は、最初のインデックスは自動選択されません。 – user384080

1

DirectXResolution.Resolutionsデータが利用可能になったときにそれ以外の場合は、あなたのComboBoxが更新されませんObservableCollection<T>でなければなりません。 CollectionChangedイベントをObservableCollection<T>とすると、最初の項目を選択できます。

DirectXResolution.Resolutionsた場合には、このコレクションのラッパーを作成し、ObservableCollectionではなく、ここでINotifyCollectionChanged

0

を継承コードでそれを行う方法です:

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

Itemsを更新することができるObservableCollectionです。 Selectedは、選択した項目の双方向プロパティです。このコードは、ビューモデルのコンストラクタに配置する必要があります。

関連する問題