2012-09-14 17 views
16

क्या कोई मुझे निम्नलिखित एक्सएएमएल लाइन समझा सकता है?डेटाकॉन्टेक्स्ट और बाध्यकारी स्वयं रिलेटिवसोर्स

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

Here उपयोग का सरल उदाहरण।

C# कोड के साथ उस लाइन को कैसे बदलें?

उत्तर

12

जो कि संपत्ति के साथ ऑब्जेक्ट के बराबर DataContext संपत्ति सेट करता है। कोड बराबर this.DataContext = this;

होगा संपादित

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

EDIT2

यहाँ कोड में इसे कैसे सेट के पीछे (अपने उदाहरण से मेल खाते) है:

public partial class ListViewTest : Window 
{ 
    ObservableCollection<GameData> _GameCollection = 
     new ObservableCollection<GameData>(); 

    public ListViewTest() 
    { 
     _GameCollection.Add(new GameData { 
      GameName = "World Of Warcraft", 
      Creator = "Blizzard", 
      Publisher = "Blizzard" }); 
     _GameCollection.Add(new GameData { 
      GameName = "Halo", 
      Creator = "Bungie", 
      Publisher = "Microsoft" }); 
     _GameCollection.Add(new GameData { 
      GameName = "Gears Of War", 
      Creator = "Epic", 
      Publisher = "Microsoft" }); 

     InitializeComponent(); 

     this.DataContext = this; //important part 
    } 

    public ObservableCollection<GameData> GameCollection 
    { get { return _GameCollection; } } 

    private void AddRow_Click(object sender, RoutedEventArgs e) 
    { 
     _GameCollection.Add(new GameData { 
      GameName = "A New Game", 
      Creator = "A New Creator", 
      Publisher = "A New Publisher" }); 
    } 
} 
+0

ठीक है एक नया stackoverflow अनुरोध बनाने चाहिए, लेकिन क्यों? और क्यों यदि मैं इस लाइन को हटा देता हूं तो मैं अपनी सूची दृश्य में कोई नई वस्तु नहीं जोड़ सकता हूं? – gliderkite

+0

@gliderkite यदि आप उदाहरण से जुड़े हुए उदाहरण को कर रहे हैं, तो मेरा अनुमान यह है कि ऑब्जेक्ट्स आपके 'ऑब्जर्जेबल कोलेक्शन' में सही ढंग से जोड़े जा रहे हैं, लेकिन बाइंडिंग विफल हो रही है। –

+0

हां, मैं जानना चाहता हूं कि उदाहरण में वह डेटाकॉन्टेक्स्ट को इस तरह से क्यों सेट करता है, और यदि XAML लाइन का उपयोग न करने का कोई तरीका है। – gliderkite

2

इसका मतलब है कि इस प्रकार नियंत्रण "DataContext इस DataContext संपत्ति का मालिक है।" कुछ समय क्योंकि आप डिजाइन समय में डेटा बाइंडिंग देख सकते हैं XAML पर DataContext घोषित करने के लिए उपयोगी हो सकता है:

सी # में यह

myTextBox.DataContext = myTextBox; 
0

अपने दूसरे सवाल का जवाब देने के लिए किया जाएगा। यदि आप इसे कोड द्वारा घोषित करते हैं, तो डाटाबेसिंग केवल रनटाइम पर ही की जाएगी।

डिज़ाइन समय (नकली) डेटा प्राप्त करने के अन्य तरीके हैं। अधिक जानने के लिए, कृपया "झुकाव" के बारे में पूछें।

नोट: एक सामान्य नियम के रूप में, कृपया याद रखें कि यदि आप एक और सवाल है, तो आप :-)

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