gpt4 book ai didi

wpf - 如何在WPF中使用DataTrigger设置在ViewModel中定义的属性

转载 作者:行者123 更新时间:2023-12-04 04:08:05 26 4
gpt4 key购买 nike

我正在编写使用DataTrigger在ViewModel中设置属性的XAML文件。 ViewModel类定义为:

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

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

我想在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>
........................

这不会编译。当我改变
     <Setter Property="ForegroundBrush" Value="Black" />     


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

它给我错误:

Dependency property field missing ....



如何编写此代码,以便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>

无论如何,在ViewModel中获得有关视觉表示的信息通常不是一个好主意。

关于wpf - 如何在WPF中使用DataTrigger设置在ViewModel中定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4804437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com