2013-08-09 10 views
7

मैं व्यूमोडेल में रखे गए शब्दकोश में एक डब्लूपीएफ टेक्स्टबॉक्स को बांधने का प्रयास करता हूं। व्यूमोडेल को देखने के लिए डेटाकॉन्टेक्स्ट के रूप में उपयोग किया जाता है। मुझे बहुत सारे उदाहरण मिले और यह आसान लगता है, लेकिन यह मेरे लिए काम नहीं करेगा।डिक्शनरी प्रविष्टि के लिए WPF बाध्यकारी टेक्स्टबॉक्स

दृश्य:

पाठ बॉक्स एक्स: नाम = "txbTest" Grid.Row = "10" Grid.Column = "2" पाठ = "{बाइंडिंग MyDict [प्रथम]}"

ViewModel:

public Dictionary<string, string> MyDict = new Dictionary<string, string> 
     { 
      {"First", "Test1"}, 
      {"Second", "Test2"} 
     }; 

मैं कोशिश सभी संस्करणों मैं

Text="{Binding MyDict[First]}" 
Text="{Binding Path=MyDict[First]}" 
Text="{Binding MyDict[First].Text}" 
Text="{Binding MyDict[First].Value}" 
पाया

लेकिन कुछ भी काम नहीं करता है, टेक्स्टबॉक्स खाली है। कोई उपाय?

+0

आप किसी क्षेत्र से जुड़ नहीं सकते हैं। एक संपत्ति के रूप में 'MyDict' परिभाषित करें। मैंने अपने जवाब में नमूना कोड साझा किया है। –

+1

जाहिर है, यह इतना आसान हो सकता है। धन्यवाद, यह काम करता है। मुझे कुछ उदाहरणों से निर्देशित किया गया था। – user2377283

उत्तर

18

आपके कोड में एक बाध्यकारी त्रुटि है क्योंकि MyDict कोई संपत्ति नहीं है। आप और के लिए नहीं एक Field

System.Windows.Data Error: 40 : BindingExpression path error: 'MyDict' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=MyDict[First]; DataItem='MainWindow' (Name=''); target element is 'TextBox' (Name='textBox1'); target property is 'Text' (type 'String') 

बदलें MyDict Field एक Property की तरह करने के लिए नीचे

private Dictionary<string, string> _MyDict; 

    public Dictionary<string, string> MyDict 
    { 
     get { return _MyDict; } 
     set { _MyDict = value; } 
    } 

दिखाए अपने ViewModel प्रारंभ MyDict के निर्माता में एक Property करने के लिए बाध्य किया है।

 MyDict = new Dictionary<string, string> 
     { 
      {"First", "Test1"}, 
      {"Second", "Test2"} 
     }; 

निम्नलिखित दो वेरिएंट के रूप में MyDict [ "कुंजी"] एक string और string रिटर्न एक Text या Value संपत्ति नहीं है काम नहीं करेगा। अन्य दो प्रकारों को काम करना चाहिए।

Text="{Binding MyDict[First].Text}" 
Text="{Binding MyDict[First].Value}" 
+1

जाहिर है, यह इतना आसान हो सकता है। धन्यवाद, यह काम करता है। मुझे कुछ उदाहरणों से निर्देशित किया गया था। – user2377283

+0

आपका स्वागत है! अगर आपको यह उपयोगी लगता है तो जवाब स्वीकार करें। –

+0

आप इस प्रोग्रामिक तरीके से करने के बारे में कैसे जाएंगे? मान लें कि मैं गतिशील रूप से टेक्स्टबॉक्स और शब्दकोश बना देता हूं। – estebro

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