2011-02-07 3 views
2

DataTriggerを使用して、バインドされているSelectedItemがnullの場合、ComboBoxのSelectedIndexを0に設定します。しかし、それは動作していません。どこが間違っていますか?次のようにWPFデータトリガーが機能しません - ComboBoxで選択されたインデックスが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_masterヌルが、それでもDataTriggerが動作していません!

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

+0

color_masterはOnNotifyPropertyChangedを実装していますか? – NVM

+0

@NVM - はいcolor_masterはOnNotifyPropertyChangedを実装しています – GuruC

答えて

1

唯一の推測ですが、SelectedItemSelectedIndexの両方を使用すると、WPF実装に依存関係が作成されます。「誰が勝つのですか?実装の事です。たとえそれがどこかに書かれていても、すべての開発者がその注文を知っていることを暗示しています。

私はあなたがここで行うことができ、最も単純なものは、単一のViewModel年代に結合SelectedColorIndexプロパティを使用してViewModelcolor_masterに基づいて値を計算させることだと思います。だから、最終的な結果は次のようになります。

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

更新:あなたのビューモデルが触れることができないと述べたので、ここでは別のオプションがあります。 MyObject.color_masterを取ると、インデックスに変換します独自のIValueConverterを書く:ColorMasterToIndexConverterは(同じUserControl.Resourcesコレクションに、言うために)到達可能なリソースdictonaryで定義された

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

+0

@Avanka - 私は何らかのビジネス上の理由からViewModelに何かを追加します。それは凍っている。私の要件は非常に単純です。コンボボックスで何も選択されていない場合は、最初の項目を選択します。 – GuruC

+0

@GuruC - 回答を更新しました – Anvaka

+0

ありがとうございました! – GuruC

関連する問題