2012-04-18 19 views
6

I XAML-Code ein Teil davon bin mit istMit Datatrigger mit mehreren Werten in 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> 

Jetzt möchte ich eine Datatrigger verwenden, die können, wie die Werte als 3, 301, 302 oder 303 haben kann Ich tue das. Ich habe versucht mit Multidatatrigger, aber es hat nicht funktioniert. Der Code, den ich mit Multidatatrigger versucht wurde:

<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 wollen Sie erreichen, wid daten trigger? – Akanksha

+0

@ user1341006 Wie kann Ihre Eigenschaft 'Name' 5 verschiedene Werte gleichzeitig haben ?? – Ankesh

Antwort

9

Multidatatrigger gilt, wenn alle der Bedingungen nicht erfüllt sind jede, das ist, warum Ihr Multidatatrigger funktioniert nicht.

Entweder haben vier separaten Auslöser, oder setzen Sie den Zustand in einen separaten boolean Eigenschaft wie

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

eine Eigenschaft Änderungsbenachrichtigung für ShowAssessment erhöhen, wenn Wertänderungen

zB

int Value { 
    get{ return _value; } 
    set { 
     _value = value; 
     RaisePropertyChanged("Value"); 
     RaisePropertyChanged("ShowAssessment"); 
    } 
} 

und dann bei ShowAssessment auslösen.

Wahrscheinlich ist eine bessere Lösung, eine HeaderText-Eigenschaft mit einer switch-Anweisung hinzuzufügen, die den richtigen Header-Text basierend auf Value zurückgibt. Dann binden Sie einfach den Text des Headers an diesen. Keine Trigger erforderlich.

+0

Ich möchte den Trigger anwenden, wenn einer der Werte erfüllt. Ich möchte nur einen Trigger verwenden, ohne vier Trigger zu verwenden. – Jaguar

+0

Es gibt ein paar Lösungen in meiner Antwort. Ein Trigger für Ihre vier Werte oder keine Trigger durch Verschieben der Logik in das Ansichtsmodell. – Phil

0

MultidataTrigger wird ausgeführt, wenn alle Bedingungen erfüllt sind. So

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

Sie einen einzelnen Datatrigger benötigen

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

Stellen Sie den Wert des Enum mit einer definierten Logik in Ihrem Code ...

Beispiel:

Validate() 
{ 
    if(Value == 301 || Value == 302|| ....) 
    { 
     ConditionEnum = MyEnum.Assessment; 
    } 
    //Other Conditions 
} 

Ich verlasse die Implementierung von INotifyPropertyChanged. Verwenden Sie es, um Änderungsbenachrichtigungen bereitzustellen.

+0

Ich möchte es, wenn der Wert entweder 3, 301, 302 oder 303 ist. Wie kann ich das tun? – Jaguar