2011-01-26 7 views
8

Estoy escribiendo un archivo XAML que usa DataTrigger para establecer una propiedad en ViewModel. La clase ViewModel define como:Cómo utilizar DataTrigger para establecer una propiedad definida en ViewModel en WPF

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

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

quiero usar DataTrigger en el View.xaml para establecer el ForegroundBrush propiedad. El XAML que escribí es:

<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> 
    ........................ 

Esto no se compila. Cuando cambié la

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

a

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

me da error:

Dependency property field missing ....

¿Cómo tengo escribir esto para que el DataTrigger puede establecer la propiedad ForegroundBrush en el modelo de vista?

Respuesta

6

Los reguladores en sus DataTriggers solo deberían cambiar las propiedades de sus elementos UI (y también solo funcionan con DependencyProperties).
Establezca la Propiedad Foregound de su StatusBarItem directamente y configure el TargetType del Estilo. Eso debería ayudar.

<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> 

Tener información sobre la representación visual en su ViewModel generalmente no es una buena idea de todos modos.

Cuestiones relacionadas