2011-07-11 19 views
0

タイトルには、コンボボックス内の特定の項目が選択されたときに表示されます。コンボボックス内の項目が選択されているときに表示するよう設定します。

私は、次の

<ComboBox Name="cmbRequiredRule" SelectedValuePath="Content"                          
      SelectedValue="{Binding Path=ClientValidation.NarrativeRequiredRule}"> 
    <ComboBoxItem>All</ComboBoxItem>       
    <ComboBoxItem>Matching</ComboBoxItem> 
</ComboBox> 

<Border Visibility="Collapsed"> 
    <Border.Resources> 
     <Style TargetType="{x:Type Border}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Resources> 
.... 
</Border> 

とビューモデルでは、このプロパティを試してみました:

public string NarrativeRequiredRule 
    { 
     get... 
     set... 
    } 

が、トリガが

答えて

1

Visibility=Collapsedを境界タグの一部としてではなく、スタイルセッターに設定してみてください。値がタグの一部として指定されたときにDataTriggerが適用されない問題が過去にありました。

<Border> 
     <Border.Resources> 
      <Style TargetType="{x:Type Border}"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Test}" Value="Matching"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Resources> 
     ... 
    </Border> 
+0

私はバインディングを試みた私の質問で。どちらも同じ問題があります。 – Marcom

+0

@マコミ私の答えを変えました。私は、スタイルをこのように定義するときに私が過去に持っていた問題を思い出しました。 – Rachel

+0

はいそれは働いた!ありがとう。それは厄介なバグです:/ – Marcom

0

結合問題である可能性があり、作業していないようです。下記の例では:

<DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching"> 

ここで、ClientValidationはどこにありますか? View全体のDataContextがVMにバインドされている場合は、これらの階層を含める必要があるためです。出力ログをチェックすると、バインディングが失敗するとエラーが発生します。

+0

私はプロパティにブレークポイントを持っている、そしてそれは、その点に到達+私は、出力のいずれかの結合のエラーが表示されません。 – Marcom

+1

thats 'good。 ViewModelでINotifyPropertyChangedを実装しますか? WPFはあなたのプロパティが変更されているかどうかを知りません。 –

+0

それは同じプロパティが他のバインディングやワークで使用されているので、なぜトリガーが疑わしいのですか? – Marcom

1

ローカルに割り当てられる値には、スタイルに対してprecedenceが必要です。したがって、あなたは、@レイチェルが指摘しているように、

<Setter Property="Visibility" Value="Collapsed" /> 

を持っている必要があります。 また、ダミーコンバータを使ってバインディングをデバッグしようとしましたが、値がMatchingの代わりにSystem.Windows.Controls.ComboBoxItem: Matchingであることが判明しました。

したがって、最終的なスタイルは次のとおりです。

  <Style TargetType="{x:Type Border}"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="System.Windows.Controls.ComboBoxItem: Matching"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers>      
      </Style> 
関連する問題