2011-01-26 12 views
8

Sto scrivendo un file XAML che utilizzano DataTrigger per impostare una proprietà nel ViewModel. La classe ViewModel definita come:Come utilizzare DataTrigger per impostare una proprietà definita nel ViewModel in WPF

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

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

voglio usare DataTrigger nel View.xaml per impostare la ForegroundBrush proprietà. Lo XAML che ho scritto è:

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

Questo non viene compilato. Quando ho cambiato il

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

a

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

mi dà errore:

Dependency property field missing ....

come posso scrivere questo in modo che il DataTrigger possibile impostare la ForegroundBrush proprietà nel ViewModel?

risposta

6

Setter nei tuoi DataTriggers dovrebbe cambiare proprietà degli elementi dell'interfaccia utente solo (e anche loro funzionano solo con DependencyProperties).
Impostare la Foregound proprietà della vostra StatusBarItem direttamente e impostare il TargetType dello stile. Questo dovrebbe aiutare.

Avere informazioni sulla rappresentazione visiva nel ViewModel di solito non è una buona idea.

Problemi correlati