我正在编写一个XAML文件,该文件使用DataTrigger在ViewModel中设置属性.ViewModel类定义为:
public class ShellModel : INotifyPropertyChanged
{
public Brush ForegroundBrush
{
get; set;
}
....................
}
Run Code Online (Sandbox Code Playgroud)
我想在View.xaml中使用DataTrigger来设置属性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>
........................
Run Code Online (Sandbox Code Playgroud)
这不编译.当我改变了
<Setter Property="ForegroundBrush" Value="Black" />
Run Code Online (Sandbox Code Playgroud)
至
<Setter Property="ShellModel.ForegroundBrush" Value="Black" />
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
依赖属性字段缺失....
我该怎么写这个,以便DataTrigger可以在ViewModel中设置属性ForegroundBrush?
DataTriggers中的setter只应更改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>
Run Code Online (Sandbox Code Playgroud)
无论如何,在ViewModel中获取有关可视化表示的信息通常都不是一个好主意.
| 归档时间: |
|
| 查看次数: |
8022 次 |
| 最近记录: |