2012-04-18 13 views
6

estoy usando el código XAML parte de la cual esDataTrigger con más de un valor en WPF

<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 puede Hago esto. He intentado con Multidatatrigger, pero no funcionó. El código que he intentado con Multidatatrigger era:

<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> 
+0

Wat ¿quieres lograr el gatillo de datos wid? – Akanksha

+0

@ user1341006 ¿Cómo puede su propiedad 'Nombre' tener 5 valores diferentes al mismo tiempo? – Ankesh

Respuesta

9

MultiDataTrigger se aplica cuando todos de las condiciones no se cumplen ninguna , por eso su MultiDataTrigger no está funcionando.

o bien tienen cuatro disparadores separados, o poner la enfermedad en una propiedad booleano como

bool ShowAssessment 
{ 
    return Value == 301 || Value == 302 ... 
} 

levantar una notificación de cambio de propiedad de ShowAssessment cuando el valor cambia

por ejemplo

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 devuelve el texto de encabezado correcto basado en Value. Luego solo une el texto del encabezado a eso. No se requieren disparadores

+0

Quiero que se aplique el activador cuando satisface cualquiera de los valores. Quiero solo un gatillo sin usar cuatro gatillos. – Jaguar

+0

Hay un par de soluciones en mi respuesta. Un desencadenante para sus cuatro valores, o ningún activador moviendo la lógica al modelo de vista. – Phil

0

MultidataTrigger actuará cuando se cumplan todas las condiciones. Así

<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> 

va a requerir una sola DataTrigger

<DataTrigger Binding="{Binding Path=ConditionEnum}" Value="1"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/> 
</DataTrigger> 

establecer el valor de la enumeración con una lógica definida en el 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.

+0

Lo quiero en caso de que el valor sea 3, 301, 302 o 303. ¿Cómo puedo hacer esto? – Jaguar

Cuestiones relacionadas