2010-06-07 18 views
7

लिए तो मेरे पास है एक TreeView है कि इस तरह दिखता है:बाध्यकारी TreeView चयन ViewModel

<TreeView Name="elementTreeView" 
         ItemsSource="{Binding Elements}" 
         Width="Auto" 
         SelectedValuePath="Path" /> 

मैं भी एक TextBlock के रूप में परिभाषित किया है इस प्रकार है:

<TextBlock Text="{Binding ElementName=elementTreeView, Path=SelectedValue}" /> 

मेरे ModelView सुंदर बुनियादी है और वास्तव में होता है आप क्या उम्मीद करेंगे जो मैं खोज रहा हूं वह मेरे व्यूमोडेल में चयनित वैल्यू में एक संपत्ति को बांधने का एक तरीका है। अभी, टेक्स्ट ब्लॉक मुझे जो दिखता है दिखाता है। क्या इस संपत्ति को बांधने का कोई आसान तरीका है?

+0

पूरी तरह से सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं .. क्या आप TreeView को VM की चयनित वैल्यू प्रॉपर्टी को अपडेट करना चाहते हैं, या TreeView को अपडेट करने के लिए VM की चुनीValue प्रॉपर्टी को अपडेट करना चाहते हैं? – hemp

+0

क्षमा करें अगर मेरा प्रश्न काफी समझ में नहीं आया था। मैं अभी भी WPF के लिए नया हूँ। मैं वृक्ष दृश्य को वीएम की चयनित वैल्यू संपत्ति को अपडेट करना चाहता हूं। मैं एमवीवीएम पैटर्न को सही तरीके से बनाए रखने के लिए चयनित इटैम चेंजेड इवेंट की बजाय बाध्यकारी का उपयोग करके इसे करने का भी प्रयास कर रहा हूं। – LandonSchropp

उत्तर

4

तो यह पता चला है कि इस MVVM पैटर्न का पालन नहीं कर काफी सही ढंग का परिणाम है। समाधान केवल एक ViewModel ऑब्जेक्ट का उपयोग करना था।

public ElementViewModel Element { 
    get { 
     return this; 
    } 
} 

तब मेरे TreeView घोषणा कुछ इस तरह देखा: ViewModel (जिसका प्रकार है ElementViewModel) वस्तु के अंदर, मैं की तरह कुछ था

<TreeView Name="treeView" 
      ItemsSource="{Binding Elements}" 
      Width="Auto" 
      SelectedValuePath="Element" /> 

उसके बाद, सब मैं करना था बाँध था मेरे दूसरे विचार में तत्व के लिए।

0

आप अपने व्यूमोडेल में TreeView की SelectedValue संपत्ति को बाध्य करने के लिए OneWayToSource का बाइंडिंग मोड का उपयोग कर सकते हैं। फिर टेक्स्टब्लॉक की टेक्स्ट प्रॉपर्टी को उसी व्यूमोडेल प्रॉपर्टी के लिए बाध्यकारी वनवे का उपयोग करके बाध्य करें।

+0

समस्या यह प्रतीत होती है कि चयनित वैल्यू केवल पढ़ने के लिए है, इसलिए यह मुझे सीधे इसके साथ बाध्य नहीं होने देगा। – LandonSchropp

+0

OneWayToSource बाध्यकारी मोड आपको केवल पढ़ने और गैर-निर्भरता गुणों के आसपास काम करने की अनुमति देता है; यही कारण है कि मैंने इसे सुझाव दिया। यह तकनीक खराब एमवीवीएम कार्यान्वयन के साथ भी काम कर सकती है। – hemp

-1

आप सीधे अपने ViewModel की किसी प्रॉपर्टी तक TreeView बाध्य कर सकते हैं:

यह वीएम में "SelectedItem" संपत्ति के लिए बाध्य होगा।

<TreeView Name="elementTreeView" 
        ItemsSource="{Binding Elements}" 
        SelectedValue="{Binding SelectedItem, Mode=OneWayToSource}" 
        Width="Auto" 
        SelectedValuePath="Path" /> 
+0

जब मैं ऐसा करने का प्रयास करता हूं तो मुझे निम्न बिल्ड त्रुटि मिलती है: 'चयनित वैल्यू' प्रॉपर्टी केवल पढ़ने योग्य है और मार्कअप से सेट नहीं की जा सकती है। – LandonSchropp

+0

@helixed: क्षमा करें - यह shoudl onewaytosource –

+0

यह अभी भी एक बाध्यकारी त्रुटि में परिणाम। – Justin