WPF

2012-04-18 6 views
6
में एक से अधिक मूल्यों के साथ DataTrigger का उपयोग

मैं जिनमें से XAML कोड भाग का उपयोग कर रहा है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> 

अब मैं एक dataTrigger उपयोग करने के लिए के रूप में 3, 301, 302 या 303 कैसे कर सकता मान हो सकते हैं जो चाहते हैं मैं यह करता हूँ। मैंने मल्टीडाटाट्रिगर के साथ प्रयास किया, लेकिन यह काम नहीं करता है। कोड मैं Multidatatrigger साथ की कोशिश की थी:

<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

क्या आप विस्तृत डेटा ट्रिगर प्राप्त करना चाहते हैं? – Akanksha

+0

@ user1341006 आपकी संपत्ति 'नाम' में एक ही समय में 5 अलग-अलग मान हो सकते हैं ?? – Ankesh

उत्तर

9

MultiDataTrigger लागू होता है जब सभी शर्तों का नहीं किसी भी मुलाकात कर रहे हैं, यही कारण है कि अपने MultiDataTrigger काम नहीं कर रहा है।

या तो चार अलग चलाता है, या एक अलग बूलियन संपत्ति में हालत डाल जैसे

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

जब मूल्य में परिवर्तन

जैसे

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

ShowAssessment के लिए एक संपत्ति परिवर्तन सूचना जुटाने और फिर ShowAssessment पर ट्रिगर करें।

शायद एक बेहतर समाधान एक हेडरटेक्स्ट प्रॉपर्टी को स्विच स्टेटमेंट के साथ जोड़ना है जो Value पर आधारित सही हेडर टेक्स्ट देता है। फिर उस पर हेडर का टेक्स्ट बाध्य करें। कोई ट्रिगर्स की आवश्यकता नहीं है।

+0

मैं ट्रिगर को लागू करना चाहता हूं जब कोई भी मूल्य संतुष्ट हो। मैं केवल एक ट्रिगर में चार ट्रिगर्स का उपयोग किए बिना चाहता हूं। – Jaguar

+0

मेरे उत्तर में कुछ समाधान हैं। आपके चार मानों के लिए एक ट्रिगर, या तर्क मॉडल में तर्क को स्थानांतरित करके कोई ट्रिगर्स नहीं। – Phil

0

मल्टीडाटा ट्रिगर कार्य करेगा जब सभी हालत संतुष्ट होगी। तो

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

आप एक ही DataTrigger

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

अपने कोड में परिभाषित किया जाता है तर्क के साथ Enum का मान सेट की आवश्यकता होगी ...

उदाहरण:

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

मैं INotifyPropertyChanged के कार्यान्वयन को छोड़ रहा हूं। परिवर्तन अधिसूचनाएं प्रदान करने के लिए इसका इस्तेमाल करें।

+0

मैं चाहता हूं कि यह मान 3, 301, 302 या 303 हो। मैं यह कैसे कर सकता हूं? – Jaguar

संबंधित मुद्दे

 संबंधित मुद्दे