2012-04-17 11 views
2

私のViewModelのブール値プロパティにContentプロパティがバインドされたボタンコントロールがあります。このボタンは、非同期WCFコールを介して実行される産業機械のバルブの開閉に使用されます。サービスが戻るとブール値のプロパティが更新され、ボタンの視覚的状態への変更がトリガされます。バルブが閉じているとき、それを通る断面を持つバルブが開いているときはWPF trigger on Contentプロパティ(ブール値にバインドされています)が動作していません

<Button Command="{Binding Path=OpenCloseValveCommand}" 
     Content="{Binding Path=ValveIsOpen}" 
     Style="{StaticResource ResourceKey=OnOffButtonStyle}"> 

ボタンが緑色である必要があり、赤:これは、ボタンXAMLです。これはスタイルですxaml:

<Style TargetType="Button" x:Key="OnOffButtonStyle" > 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Canvas> 
        <Rectangle x:Name="_rect" Fill="Red" Stroke="Black" Width="30" Height="30"></Rectangle> 
        <Path x:Name="_path" Data="M0,0 L30,30 M0,30 L30,0" StrokeThickness="1" Stroke="Black" /> 
       </Canvas> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Content" Value="true"> 
         <Setter TargetName="_rect" Property="Fill" Value="Lime" /> 
         <Setter TargetName="_path" Property="Visibility" Value="Hidden" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

残念ながら、トリガは起動しないようです。私はそれがボタンと関係があると推測しているコンテンツはブール型にバインドされている - 私はトリガ値として "真"以外を使用する必要がありますか? (私がviewmodelプロパティを整数に変更し、0または1を使用し、トリガの値が "1"の場合、トリガは機能します)。事前に

おかげ

アンディ

答えて

11

あなたは、明示的に型を指定することができます

<Window ... 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     ...> 

<Trigger Property="Content"> 
    <Trigger.Value> 
     <sys:Boolean>True</sys:Boolean> 
    </Trigger.Value> 
    <Setter TargetName="_rect" Property="Fill" Value="Lime" /> 
    <Setter TargetName="_path" Property="Visibility" Value="Hidden" /> 
</Trigger> 
+0

ちょうど私が後だった!どうもありがとう –

0

はそのためDataTriggerを使用します。

<Button Command="{Binding Path=OpenCloseValveCommand}" 
     Style="{StaticResource ResourceKey=OnOffButtonStyle}"> 

<Style TargetType="Button" x:Key="OnOffButtonStyle"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Canvas> 
        <Rectangle x:Name="_rect" Fill="Red" Stroke="Black" Width="30" Height="30"></Rectangle> 
        <Path x:Name="_path" Data="M0,0 L30,30 M0,30 L30,0" StrokeThickness="1" Stroke="Black" /> 
       </Canvas> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding ValveIsOpen}" Value="True"> 
         <Setter TargetName="_rect" Property="Fill" Value="Lime" /> 
         <Setter TargetName="_path" Property="Visibility" Value="Hidden" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

を潜在的に上のボタンの数があるでしょう同じウィンドウ、それぞれ異なるviewmodelプロパティにバインドされているので、私はデータトリガwを推測するouldn'tは適している。 –

+0

OnOffButtonスタイルについては、[ToggleButton Class](http://msdn.microsoft.com/en-us/library/ms612601.aspx)を見て、ViewModelプロパティに 'IsChecked'をバインドし、' Template'スタイルを設定してください。 – LPL

関連する問題