2011-01-26 43 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中的視覺表示的信息通常不是一個好主意。

相關問題