0
我的WPF应用程序有基于两个不同的int
性质有几个布尔属性视图模型对象样式:需要帮助建立基于以下几个条件
public class MyViewModel : ModelBase {
public int Class {
get { return iClass; }
set {
iClass = value;
OnPropertyChanged("Class");
OnPropertyChanged("IsClass1");
}
}
private int iClass;
public int Status {
get { return iStatus; }
set {
iStatus = value;
OnPropertyChanged("Status");
OnPropertyChanged("IsStatus1");
OnPropertyChanged("IsStatus2");
OnPropertyChanged("IsStatus3");
}
}
private int iStatus;
public bool IsClass1 {
get { return Class == Class1; }
}
public bool IsStatus1 {
get { return Status == Status1; }
}
public bool IsStatus2 {
get { return Status == Status2; }
}
public bool IsStatus3 {
get { return Status == Status3; }
}
// . . .
}
我在显示这些MyViewModel
窗口的ListBox
对象。该对象的数据包含一个图像,该图像在Border
控件内显示为缩略图。 BorderBrush
和BorderThickness
属性的值取决于从布尔属性派生的一些条件。在C#中,这些条件的代码如下所示:
string color = alarm.IsClass1 ? "BorderColor1" :
alarm.IsStatus1 ? "BorderColor2" :
alarm.IsStatus2 ? "BorderColor3" :
alarm.IsStatus3 ? "BorderColor4" :
"BorderColor5";
Border.SetResourceReference(BorderBrushProperty, color);
Border.BorderThickness = new Thickness(alarm.IsStatus1 || alarm.IsStatus3 ? 4.0 : 2.0);
我想把这变成Style
在XAML为在ListBox
使用的DataTemplate
:
<DataTempate DataType="{x:Type local:MyViewModel}">
<Border BorderBrush="Black"
BorderThickness="2"
HorizontalAlignment="Center"
Margin="5"
Height="100"
Name="Border"
VerticalAlignment="Center"
Width="100">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0"
Name="AlarmImage"
Source="{Binding Path=Image}"
Stretch="Fill" />
<local:ResponseTimer Expired="Timer_Expired"
Grid.Row="1"
HideIfStatus1="True"
IsTabStop="False"
MinHeight="10"
x:Name="TheTimer"
TimeoutPeriod="00:02:30"
VerticalAlignment="Bottom" />
</Grid>
</Border>
</DataTemplate>
我试过以下,但它不起作用:
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor5}" />
<Setter Property="BorderThickness" Value="2" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsStatus1}" Value="true">
<Setter Property="BorderThickness" Value="4" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsStatus3}" Value="true">
<Setter Property="BorderThickness" Value="4" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsClass1}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor1}" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsClass1}" Value="False" />
<Condition Binding="{Binding Path=IsStatus1}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor2}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsClass1}" Value="False" />
<Condition Binding="{Binding Path=IsStatus2}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor3}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsClass1}" Value="False"/>
<Condition Binding="{Binding Path=IsStatus3}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor4}" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
我在做什么错?
在这种情况下,您可能想要一个值或多值转换器。 –