को ट्रिगर नहीं करता है मुझे किसी विशेष xaml डेटाबेस के साथ कोई समस्या है। मेरे पास दो सूची बॉक्स हैं (मास्टर-विवरण, इसलिए सूची बॉक्स में IsSynchronizedWithCurrentItem सत्य पर सेट है)। मैं अपने viewmodel वर्ग पर किसी पूर्णांक संपत्ति बनाई (यानी हम इस संपत्ति SelInd कॉल कर सकते हैं) और के बारे में विवरण ViewModel मैं इस तरह से बाँध:OneWayToSource बाध्यकारी के साथ चयनित इंडेक्स
SelectedIndex="{Binding Mode=OneWayToSource, Path=SelInd}"
मैं अपने viewmodel जब विवरण लिस्टबॉक्स परिवर्तन पर चयनित आइटम जानना चाहता हूँ
मुझे रनटाइम पर कोई त्रुटि/अपवाद नहीं मिलता है, लेकिन बाध्यकारी ट्रिगर नहीं करता है: चयनित आइटम बदलते समय मेरी व्यूमोडेल की संपत्ति अपडेट नहीं होती है। यदि मैं बाइंडिंग मोड को दोवे में बदलता हूं तो सबकुछ ठीक काम करता है, लेकिन मुझे इसकी आवश्यकता नहीं है। मुझे OneWayToSource के साथ काम करने की आवश्यकता है (btw वही गैर-कामकाजी व्यवहार लागू होता है यदि मैं चयनित वैल्यू गुणों में चयनित इटैम को बांधता हूं)।
क्यों उन बाइंडिंग OneWayToSource के साथ ट्रिगर नहीं करते हैं?
चीजों को स्पष्ट करने के लिए यहां एक और पूर्ण कोड उदाहरण है: संपादित करें: मैं असली कोड (एनडीए) नहीं दिखा सकता लेकिन मैं यहां कुछ सरल और समान दिखाऊंगा (पृष्ठ का डेटाकॉन्टेक्स्ट एक उदाहरण है PageViewModel क्लास के बाद में समझाया गया) मुझे बस इतना चाहिए कि मेरी व्यूमोडेल क्लास की सेलिंड संपत्ति को दूसरी सूची बॉक्स में चयनित इंडेक्स के मान को हमेशा प्रतिबिंबित करना चाहिए। मुझे ऐसा करने के लिए वैकल्पिक तरीके मिल गए हैं (कोड हैंडलर कोड-बैक या एक संलग्न व्यवहार में) लेकिन अभी मैं उत्सुक हूं कि यह OneWayToSource बाइंडिंग के साथ क्यों काम नहीं करता है।
<Page>
<ContentControl x:Name="MainDataContext">
<Grid DataContext={Binding Path=Masters}>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox Grid.Column="0"
SelectionMode="Single"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding }">
<ListBox.ItemContainerStyle>
...
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
....
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Grid.Column="1"
SelectionMode="Single"
SelectedIndex="{Binding Mode=OneWayToSource, ElementName=MainDataContext,Path=DataContext.SelInd}"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=Details}">
<ListBox.ItemContainerStyle>
...
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
....
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</ContentControl>
</Page>
यहाँ दृश्य मॉडल वर्ग
public class PageViewModel{
public ObservableCollection<MasterClass> Masters {get;set;}
public int SelInd {get;set;}
....
}
का चित्र है और यहाँ MasterClass है, यह सिर्फ एक नाम और विवरण की एक सूची
public class MasterClass{
public ObservableCollection<DetailsClass> Details {get;set;}
public String MasterName {get;set;}
....
}
कोशिश (updateSourceTriger = PropertyChanged) अपने बंधन में भाग जानना चाहते हैं .. होप आप पहले से ही लागू कर चुके हैं inotifypropertyChnahged..on you viewmodel .. – loop
धन्यवाद tanuj_loop। मैं इस सवाल में इसका उल्लेख करना भूल गया: मैंने पहले से ही अद्यतन स्रोत स्रोत का उपयोग करने का प्रयास किया है, लेकिन कुछ भी नहीं बदला है। वैसे भी, मेरा व्यूमोडेल पहले से ही INotifyProperty लागू करता है लेकिन मुझे लगता है कि यह केवल तब उपयोगी होता है जब आपको यूआई को व्यूमोडेल परिवर्तनों के बारे में सूचित करने की आवश्यकता होती है, न कि दूसरी तरफ। – Gufino2
MainDataContext क्या है? अपने व्यूमोडेल कोड और एक्सएमएल पूर्ण कोड को अपडेट करें..और वास्तव में आप क्या हासिल करना चाहते हैं .. – loop