trigger style c# wpf xaml triggers multidatatrigger

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.