c# - style datatrigger
Usando DataTrigger con más de un valor en WPF (2)
MultiDataTrigger se aplica cuando se cumplen todas las condiciones, no ninguna , es por eso que su MultiDataTrigger no está funcionando.
O tiene cuatro activadores por separado, o pone la condición en una propiedad booleana separada, como
bool ShowAssessment
{
return Value == 301 || Value == 302 ...
}
generar una notificación de cambio de propiedad para ShowAssessment cuando el valor cambie
p.ej
int Value {
get{ return _value; }
set {
_value = value;
RaisePropertyChanged("Value");
RaisePropertyChanged("ShowAssessment");
}
}
y luego se activa en ShowAssessment.
Probablemente una mejor solución es agregar una propiedad HeaderText con una instrucción switch que devuelva el texto de encabezado correcto en función del Value
. Luego solo une el texto del encabezado a eso. No se requieren disparadores
Estoy usando el código XAML, parte del cual es
<DataTrigger Binding="{Binding Path=Name}" Value="1">
<Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="2">
<Setter Property="Header" TargetName="expanderHeader" Value="Media Lecture"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="3">
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
<DataTrigger Binding="{Binding Path=Name}" Value="4">
<Setter Property="Header" TargetName="expanderHeader" Value="Question"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="5">
<Setter Property="Header" TargetName="expanderHeader" Value="General"/>
</DataTrigger>
Ahora quiero usar un dataTrigger que puede tener valores como 3, 301, 302 o 303. ¿Cómo puedo hacer esto? Intenté con Multidatatrigger, pero no funcionó. El código que probé con Multidatatrigger fue:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name}" Value="301"/>
<Condition Binding="{Binding Path=Name}" Value="301"/>
<Condition Binding="{Binding Path=Name}" Value="302"/>
<Condition Binding="{Binding Path=Name}" Value="303"/>
</MultiDataTrigger.Conditions>
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>
MultidataTrigger actuará cuando se cumplan todas las condiciones. Asi que
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Prop1}" Value="301"/>
<Condition Binding="{Binding Path=Prop2}" Value="301"/>
<Condition Binding="{Binding Path=Prop3}" Value="302"/>
<Condition Binding="{Binding Path=Prop4}" Value="303"/>
</MultiDataTrigger.Conditions>
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>
Necesitará un solo DataTrigger
<DataTrigger Binding="{Binding Path=ConditionEnum}" Value="1">
<Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>
Establezca el valor de Enum con una lógica definida en su código ...
Ejemplo:
Validate()
{
if(Value == 301 || Value == 302|| ....)
{
ConditionEnum = MyEnum.Assessment;
}
//Other Conditions
}
Estoy dejando la implementación de INotifyPropertyChanged
. Úselo para proporcionar notificaciones de cambio.