2

DataTrigger を使用して、バインドされている SelectedItem が null の場合、ComboBox の SelectedIndex を 0 に設定したいと考えています。しかし、それは機能していません。どこが間違っていますか?

xaml は次のとおりです。

<ComboBox SelectedItem="{Binding MyObject.color_master, Mode=TwoWay}"  
          ItemsSource="{Binding  MyEntities.color_master}"
          DislayMemberPath="COLOR_DESCRIPTION" >
 <ComboBox.Style>
  <Style TargetType="ComboBox">
    <Style.Triggers>                                
      <DataTrigger Binding="{Binding Path=MyObject.color_master}" Value="{x:Null}">
          <Setter Property="SelectedIndex" Value="0" />
       </DataTrigger>                                
      </Style.Triggers>
  </Style>
 </ComboBox.Style>
</ComboBox>

ここでMyObject.color_masternullですが、それでも DataTrigger は機能していません!

私の要件は非常に単純です。コンボボックスで何も選択されていない場合、最初の項目を選択したいです。

4

1 に答える 1

1

これは単なる推測ですが、両方を使用SelectedItemSelectedIndexてWPF実装への依存関係を作成すると、「誰が勝ちますか?」実装物です。どこかに文書化されていても、すべての開発者が順序を知っていることを意味します(誰がコードを保守するかわからないため、これも良くありません)。

ここでできる最も簡単なことは、ViewModelSelectedColorIndexプロパティへの単一のバインディングを使用し、ViewModelに基づいて値を計算させることだと思いますcolor_master。したがって、最終結果は次のようになります。

<ComboBox SelectedIndex="{Binding MyObjectViewModel.SelectedColorIndex, Mode=TwoWay}"  
          ItemsSource="{Binding  MyEntities.color_master}"
          DislayMemberPath="COLOR_DESCRIPTION" >
</ComboBox>

更新:ビューモデルに触れることができないと言ったので、ここに別のオプションがあります。MyObject.color_masterを取得してインデックスに変換する独自のIValueConverterを作成します。

<ComboBox SelectedIndex="{Binding MyObject.color_master, Mode=TwoWay, Converter={StaticResouce ColorMasterToIndexConverter}}"  
          ItemsSource="{Binding  MyEntities.color_master}"
          DislayMemberPath="COLOR_DESCRIPTION" >
</ComboBox>

到達可能なリソース辞書で定義されている場合ColorMasterToIndexConverter(たとえば、同じUserControl.Resourcesコレクション内)。

于 2011-02-07T13:03:23.177 に答える