2011-01-26 18 views
8

DataTriggerを使用してViewModelのプロパティを設定するXAMLファイルを作成しています。私は、プロパティForegroundBrushを設定するView.xamlにDataTriggerを使用したいDataTriggerを使用してWPFでViewModelで定義されたプロパティを設定する方法

public class ShellModel : INotifyPropertyChanged 
{  
    public Brush ForegroundBrush 
    { 
     get; set; 
    } 

    .................... 
} 

:としてのViewModelクラスが定義されました。私が書いたXAMLは次のとおりです。

<StatusBar Name="statusBar" Grid.Row="3"> 
    <StatusBarItem> 
     <StatusBarItem.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding HasError}" Value="True"> 
         <Setter Property="ForegroundBrush" Value="Red" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding HasError}" Value="False"> 
         <Setter Property="ForegroundBrush" Value="Black" /> 
        </DataTrigger> 
         </Style.Triggers> 
      </Style> 
     </StatusBarItem.Style> 
     <TextBlock Name="statusBarMessage" Foreground="{Binding ForegroundBrush}" Text="{Binding StatusMessage}"></TextBlock> 
    </StatusBarItem> 
    ........................ 

これはコンパイルされません。私は

 <Setter Property="ShellModel.ForegroundBrush" Value="Black" /> 

 <Setter Property="ForegroundBrush" Value="Black" />  

を変更すると、それは私にエラーを与える:

DataTriggerはViewModelにに、プロパティForegroundBrushを設定することができるように私はこれを書くならない方法

Dependency property field missing ....

答えて

6

DataTriggersのセッターは、UI要素のプロパティのみを変更する必要があります(また、DependencyPropertiesでも機能します)。
StatusBarItemのForegoundプロパティを直接設定し、スタイルのTargetTypeを設定します。それが助けになるはずです。

<Style TargetType="{x:Type StatusBarItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding HasError}" Value="True"> 
       <Setter Property="Foreground" Value="Red" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding HasError}" Value="False"> 
       <Setter Property="Foreground" Value="Black" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

あなたのViewModelの視覚的表現についての情報は、とにかく良い考えではありません。

関連する問題