2011-01-26 42 views
8

我在写一个使用DataTrigger在ViewModel中设置属性的XAML文件。该视图模型类定义为:如何使用DataTrigger设置WPF中的ViewModel中定义的属性

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

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

我想使用DataTrigger在View.xaml设置属性ForegroundBrush。我写的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="ForegroundBrush" Value="Black" />  

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

它给我的错误:

Dependency property field missing ....

我怎么写这篇文章,以使DataTrigger可以设置视图模型的财产ForegroundBrush?

回答

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中的视觉表示的信息通常不是一个好主意。

相关问题