2015-05-20 6 views
6

मैं अपने विंडोज आरटी ऐप को विन्डोज़ 10 पर पोर्ट/अपनाने की कोशिश कर रहा हूं और मैं नई बाइंडिंग एक्स: बाइंड को आजमाने की कोशिश कर रहा हूं।विंडोज 10 एक्स: बिस्ट टू सिलेक्ट इटैम

अब तक मैं अपने व्यू मॉडेल गुणों और अन्य व्यूलेट्स से जुड़ने में सक्षम हूं। लेकिन अब मैं एक टेक्स्टबॉक्स के पाठ को ग्रिड व्यू के चयनित इटैम में बांधने की कोशिश कर रहा हूं।

क्लासिक बाइंडिंग में मैं ऐसा कर रहा हूं।

<TextBox x:Name="tb_textgroup" 
          Grid.Row="1" 
          PlaceholderText="Change Groupname" 
          Text="{Binding UpdateSourceTrigger=PropertyChanged, 
            ElementName=gv_textgroup, 
            Mode=TwoWay,Path=SelectedItem.bezeich}" 
          IsEnabled="{Binding UpdateSourceTrigger=PropertyChanged, 
             ElementName=gv_textgroup, 
             Mode=TwoWay,Path=SelectedItem.edit_activated}" 
          Margin="20,10,20,0" 
          /> 

मैं साथ

  • पाठ यह कोशिश कर रहा था = "{x: बाइंड gv_textgroup.SelectedItem.bezeich, मोड = TwoWay}"
  • पाठ = "{x: बाइंड textgroup [gv_textgroup। SelectedIndex] .bezeich, मोड = TwoWay} "
    • जहां textgroup सभी तत्वों के साथ अपने viewmodelclass है

लेकिन इनमें से कोई भी काम नहीं किया ... कोई विचार?

और क्या कोई मुझे बता सकता है कि "निर्भरता प्रॉपर्टी" के साथ क्या करना है। मैंने "बिल्ड 2015" से viedo देखा और नमूना कोड है। लेकिन यह मेरे लिए कुछ भी नहीं कह रही है ... मैं काफी नौसिखिया हूँ ...

आपकी मदद

उत्तर

3

आप उपयोग नहीं कर सकते एक्स के लिए बहुत धन्यवाद: एक GridView की SelectedItem पर बाइंड। ऐसा इसलिए है क्योंकि चयनित इटैम एक वस्तु है, इसलिए यह कुछ भी हो सकता है। एक्स: बाइंड को वास्तविक कक्षाएं/इंटरफेस होना चाहिए। एक्स: बाइंडिंग बाध्यकारी जैसी गुणों को खोजने के लिए प्रतिबिंब का उपयोग नहीं करता है।

आप इसे एक्स द्वारा पूरा कर सकते हैं: ग्रिड व्यू के चयनित इटिम को अपने दृश्य मॉडल में बाध्य करें और फिर एक्स: टेक्स्टब्लॉक से उस पर बाध्य करें। मुझे यकीन नहीं है कि यह वास्तव में जितना चाहें प्रदर्शन में मदद करेगा।

public class ViewModel 
{ 
    public MyItem SelectedItem { get; set; } //fire prop changed 
} 

<GridView SelectedItem="{x:Bind SelectedItem, mode=Twoway}"/> 
<TextBlock Text="{x:Bind ViewModel.SelectedItem.bezeich}" 
+0

मुझे डर है कि आप सही हैं। लेकिन मुझे लगता है कि यह वास्तव में एक पिटी है कि आप ऑब्जेक्ट से अपनी कक्षा में नहीं डाले जा सकते हैं। एनीवे मुझे आशा है कि माइक्रोसॉफ्ट उस तकनीक को बेहतर बनाएगा जैसा कि उन्होंने निर्माण पर उल्लेख किया है (मैंने सोचा कि मैंने इसे एक वीडियो में पढ़ा/सुना है)। आपके समय के लिए धन्यवाद – thezapper

+0

वे संभवतः कैसे जानते हैं कि आप वस्तु को क्या चाहते हैं। एक्स: बाइंड एक संकलन समय निर्देश है। इसका मतलब है कि यह संकलन समय पर कोड बनाएगा जो आपके ऑब्जेक्ट/गुणों से जुड़ा हुआ है। आप संकलक को यह जानने की उम्मीद नहीं कर सकते कि आप एक ऑब्जेक्ट को MyObject टाइप करना चाहते हैं। –

+0

शायद ऐसा कुछ हो: thezapper

11

मुझे यकीन है कि क्यों यह काम करता है नहीं कर रहा हूँ, लेकिन अगर आप एक वस्तु-टू-वस्तु कनवर्टर, किसी भी SelectedItem पर दो तरह के रूपांतरण के लिए x:Bind कार्य बनाने।

public class NoopConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return value; 
    } 
} 

और तुम इस तरह इसका इस्तेमाल कर सकते हैं:

<ListView ItemsSource="{x:Bind ViewModel.Items}" 
     SelectedItem="{x:Bind ViewModel.SelectedItem, Mode=TwoWay, Converter={StaticResource NoopConverter}}" 
     ... 

अपने सार्वजनिक नमूनों के लिए runceel को विशेष धन्यवाद।

वह जापानी में here बताता है।

+3

यह काम करता है क्योंकि जब संकलक देखता है कि बाध्यकारी के लिए एक कनवर्टर है, तो यह इस तथ्य को अनदेखा करता है कि प्रकार के संघर्ष हो सकते हैं और कोड को रनटाइम अपवाद के जोखिम के साथ अनुमति देता है। –