2013-08-27 6 views
9

पर एक व्यूमोडेल प्रॉपर्टी कैसे सेट करें जब मेरे पास व्यू मॉडल के साथ एक सूची दृश्य है। आइटमसोर्स व्यू मॉडल में ऑब्जेक्ट्स का संग्रह है। कुछ ध्वज के लिए व्यू मॉडल पर एक संपत्ति मौजूद है, IsFlagOn। जब मैं ListViewItem को IsMouseOver का पता लगाता हूं, तो मैं उस मॉडल को दृश्य मॉडल में सत्य पर सेट करना चाहता हूं। अन्य यूआई तत्व तब उसी संपत्ति से बंधे जाते हैं ताकि दृश्य को माउसओवर के रूप में बदल दिया जा सके।प्रॉपर्टी ट्रिगर

मैं इसे एक्सएएमएल में कैसे पूरा करूं?

मैं कुछ इस तरह (लेकिन यह टूट जाता है) कल्पना कर सकते हैं:

<Style> <!-- on the ListViewItem --> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="DataContext.IsFlagOn" Value="True" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

अद्यतन:

त्रुटि

शैली संपत्ति 'IsFlagOn' को हल नहीं किया जा सकता है। सत्यापित करें कि स्वामित्व का प्रकार स्टाइल का लक्ष्य प्रकार है, या संपत्ति निर्दिष्ट करने के लिए क्लास। प्रॉपर्टी सिंटैक्स का उपयोग करें।

अद्यतन (2):

यहाँ (निम्न) मौजूदा XAML का एक सा अधिक है। आप देख सकते हैं कि ListView VM, AllItems की संपत्ति से बंधे हैं। यह ध्यान रखना महत्वपूर्ण है कि सूची में प्रत्येक आइटम एक वीएम है, जहां प्रत्येक कॉलम बाध्य है। तो ListCiewainer स्टाइल ListView वीएम या आइटम वीएम के खिलाफ बाध्यकारी है? बस देखने से दृश्य मॉडल अपडेट करने में सक्षम होने -

<ListView Itemssource="{Binding AllItems}"> 
    <ListView.ItemContainerStyle> 
     <Style> <!-- on the ListViewItem --> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="DataContext.IsFlagOn" Value="True" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <!-- ... --> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

'लेकिन यह अपवाद के साथ क्या टूटता है? 'IsFlagOn' एक निर्भरता संपत्ति है? – PoweredByOrange

+0

त्रुटि "टाइप करें डेटा कॉन्टेक्स्ट नहीं मिला"। मॉडल देखें सादा वर्ग 'INotifyPropertyChanged' को कार्यान्वित करना है, इसलिए 'IsFlagOn' एक निर्भरता संपत्ति नहीं है। –

+0

ठीक है, तो वास्तविक अपवाद क्या है? – PoweredByOrange

उत्तर

7

यह काफी क्या OneWayToSource बाध्यकारी मोड के लिए बनाया गया था। हालांकि, IsMouseOver के बाद से, केवल पढ़ने के लिए संपत्ति है आप (WPF में एक बग के कारण) यह करने के लिए सक्षम नहीं देगा:

<Setter Property="IsMouseOver" Value="{Binding Path=IsFlagOn, Mode=OneWayToSource}" /> 

तरीके हालांकि यह चारों ओर पाने के लिए कर रहे हैं। उनमें से कुछ को यहां वर्णित किया गया है: OneWayToSource binding from readonly property in XAML

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