2011-08-06 17 views
9
कारण के

, हम कुछ नियंत्रण की स्ट्रिंग संपत्ति जो निम्नलिखित कोड की तरह खाली कर दिया गया है की जाँच कर सकते हैं:WPF: ट्रिगर परिस्थिति जब नहीं रिक्त स्ट्रिंग

<Trigger SourceName="atCaption" Property="Text" Value="{x:Static sys:String.Empty}"> 
    <Setter TargetName="imgBack" Property="Margin" Value="0"/> 
    <Setter TargetName="atCaption" Property="Margin" Value="0"/> 
</Trigger> 

और फिर, कैसे एक शर्त को परिभाषित कर सकते हैं जो 'खाली नहीं' स्ट्रिंग ?

<!--unfortunately, can't accept '!=' operator in xaml.--> 
<Trigger SourceName="atCaption" Property="Text" Value!="{x:Static sys:String.Empty}"> 
    <Setter TargetName="imgBack" Property="Margin" Value="0"/> 
    <Setter TargetName="atCaption" Property="Margin" Value="0"/> 
</Trigger> 

मेरी मदद करें।

+0

समान प्रश्न यहाँ: http://stackoverflow.com/questions/356194/wpf- केवल एक चीज के बारे में मुझे लगता है कि जोड़ना होगा MVVM के साथ, विचार यह है कि उस दृश्य मॉडल पता नहीं करना चाहिए कि यह कैसे दिखाया जाता है datatrigger-जहां-मान-है-नहीं-अशक्त – LPL

उत्तर

5

एक ValueConverter का उपयोग करते हुए एक समाधान है।

MVVM का उपयोग करते समय आप ViewModel वर्ग आपको लगता है कि के लिए बाध्य कर रहे हैं पर एक अतिरिक्त संपत्ति विचार कर सकते हैं निर्धारित करता है कि एक नियंत्रण प्रदर्शित किया जाना चाहिए।

जब मैं इस सुलझाने मैं एक ट्रिगर की जरूरत नहीं है मैं बस अतिरिक्त गुण ViewModel को देखें के गुण इन अतिरिक्त गुण को देखें हेरफेर करने के लिए जोड़ सकते हैं और बाँध की MVVM-तरीके से उपयोग

+3

। इसके बजाए, दृश्य को दृश्य मॉडल लेना चाहिए और इसे प्रदर्शित करना चाहिए हालांकि यह उपयुक्त मानता है। जैसे अपने वीएम पर एक रंगीन संपत्ति रखने के लिए यह बताने के लिए कि यह चीज़ किस रंग को प्रदर्शित करे, शुद्ध एमवीवीएम दृष्टिकोण से अच्छा नहीं है। (जाहिर है असली दुनिया में, 'शुद्ध' प्रोग्रामिंग मॉडल एक छोटे से तोड़ने के लिए, करते हैं बस मैं यह कहना चाहता हूँ सोचा;)) – Steve

+1

@ user1080084 - हाँ लेकिन मैं कहना है कि मैं ValueConverters भी नापसंद करते हैं: उस में कोड है देखें और डिजाइनर द्वारा लागू किया जाना है। इन कन्वर्टर्स 'हैंग' देखें और व्यू मॉडेल के बीच। –

0

आप इसे एक बाध्यकारी सिंटैक्स का उपयोग करता है ताकि आप एक बूलियन मान में संपत्ति में बदलने के लिए एक IValueConverter वर्ग का उपयोग कर सकते एक डेटा ट्रिगर का उपयोग करते हैं। आप एक कस्टम IValueConverter के अंदर कोड में जो चेक करना चाहते हैं उसे लिख सकते हैं।

4

जल्दी से प्राप्त करने के लिए इस प्रकार के साथ चारों ओर, मूल्यों है कि रिवर्स हालत के लिए लागू तत्व घोषणा या शैली में चूक की जानी चाहिए और उसके बाद सीधे समानता शर्त का उपयोग मूल्यों को बदलने के लिए।

उदा।

मान लें कि मार्जिन 5 जो आप खाली स्ट्रिंग के लिए सेट करते हैं और 0 आपको खाली खाली स्ट्रिंग के लिए सेट करना है, तो आप डिफ़ॉल्ट रूप से स्टाइल में एक साधारण सेटर के रूप में 0 सेट करेंगे और फिर ट्रिगर और सेट का उपयोग करके खाली स्ट्रिंग की जांच करें 5. सुनिश्चित करें कि स्टाइल में ट्रिगर (5 के लिए) से पहले डिफ़ॉल्ट सेटर (0 के लिए) दिखाई देता है।

4

द्वारा जवाब बढ़ाने के लिए WPF-यह (मुझे इस के लिए एक स्थायी समाधान, नहीं त्वरित सुधार है)

<DataTrigger Binding="{Binding VolumeGroup}" Value="{x:Null}"> 
     <Setter Property="Background" Value="{StaticResource DataGridBackground}" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding VolumeGroup}" Value=""> 
     <Setter Property="Background" Value="{StaticResource DataGridBackground}" /> 
    </DataTrigger> 
</Style.Triggers> 
<!--inverted rare case: VolumeGroup will usually be empty so cells will be {StaticResource DataGridBackground}--> 
<Setter Property="Background" Value="DarkOliveGreen" /> 
संबंधित मुद्दे