2013-01-07 12 views
6

मैं उत्सुक था क्योंकि मैं WPF के साथ बाध्यकारी पर और अधिक सीख रहा था क्या आपको डेटा संदर्भ को केवल एक ही संपत्ति के {बाध्यकारी पथ =} को सेट करने के लिए सेट करना है? मैं सिर्फ उत्सुक था क्योंकि मैं पीछे के कोड के एमवीवीएम उदाहरण से सीख रहा था और ऐसा प्रतीत होता है कि मेरे पास एक ऐसी स्थिति है जिसे मैं व्यूमोडेल के डेटा संदर्भ में कुछ नहीं करना चाहता हूं और मैं संदर्भ में कोड के पीछे एक मध्यस्थ वर्ग पसंद करूंगा बंधन। तो क्या मेरे पास अभी तक एक और कक्षा है जो मैं किसी दूसरे डेटाकॉन्टेक्स्ट या कुछ समान के लिए संदर्भित कर सकता हूं? या क्या मैं संसाधन कुंजी सेट कर सकता हूं और कक्षा को किसी भी तरह संदर्भित कर सकता हूं? यदि संभव हो तो मैं अंततः एक अलग वर्ग में एक संपत्ति का उपयोग करना चाहता हूं।कक्षा से XAML तक किसी संपत्ति को बाध्य करना सीधे

ईजी:

<Window x:Class="WPFTestBinding.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:da="clr-namespace:WPFTestBinding.DataAccess" 
     xmlns:main="clr-namespace:WPFTestBinding" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <StackPanel> 
      <Label Content="Here we go: "/> 
      <TextBox x:Name="testtext" /> 
      <Label Height="50" /> 
      <!-- CODE BELOW WILL NOT WORK --> 
      <TextBox Text="{Binding Path=TestID}" x:Name="testtext2" /> 
     </StackPanel> 
    </Grid> 
</Window> 

मैं जानता हूँ कि मैं पीछे कोड में किसी पाठ बॉक्स का मूल्य निर्धारित कर सकते हैं और यह एक संपत्ति के उदाहरण में काम करता है, लेकिन यह बाध्यकारी के लिए नहीं होगा। कक्षाओं से संपत्तियों के लिए फ्लाई पर सरल बाध्यकारी करने का कोई तरीका है? मुझे एक साधारण उदाहरण नहीं मिला है जो यह करता है और मैं ऑनलाइन खोज रहा था और अधिकांश उदाहरण बाध्यकारी सीखने के दौरान सेटिंग डेटा संदर्भों या बहुत ही सरल स्थिर संसाधन उदाहरणों के बहुत गहन सेट हैं। मैं उत्सुक था अगर आप {बाध्यकारी पथ =} का उपयोग कर सकते हैं और बस कक्षा में कोड प्राप्त करने के लिए फ्लाई पर कुछ अन्य संपत्ति का विस्तार कर सकते हैं। कोड की

बाकी बहुत सरल है:

namespace WPFTestBinding.DataAccess 
{ 
    class Test 
    { 
     public string TestID { get { return "This is my test"; } } 
    } 
} 

public partial class MainWindow : Window 
    {  
     public MainWindow() 
     { 
      InitializeComponent(); 

      DataAccess.Test t = new Test(); 

      testtext.Text = t.TestID; // code behind works easily 
     } 
    } 

उत्तर

9

आप इस तरह Xaml में DataContext सेट कर सकते हैं:

<Window xmlns:da="clr-namespace:WPFTestBinding.DataAccess"> 
    <Window.DataContext> 
     <da:Test/> 
    <Window.DataContext> 

    <TextBox Text="{Binding TestID}"/> 
</Window> 
+0

है कि मैं वास्तव में क्या देख रहा था। मुझे पता था कि एक्सएएमएल में नामस्थान का विस्तार करने के लिए एक आसान तरीका था। – djangojazz

+0

@ kusi581, आप भी मेरी समस्या हल करते हैं। –

5

डेटा संदर्भ सेट नहीं है। डेटाबाइंडिंग नहीं जानता कि टेस्टआईडी कहां से लेना है। यहाँ सही कोड के पीछे है:

namespace WPFTestBinding.DataAccess 
{ 
    class Test 
    { 
     public string TestID { get { return "This is my test"; } } 
    } 
} 

public partial class MainWindow : Window 
{  
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataAccess.Test t = new Test(); 

     DataContext = t;   
    } 
} 
7

कुछ बिंदुओं को नोट करने के लिए:

  • संपत्ति TestID आप बाध्य करने के लिए कोशिश कर रहे हैं केवल पढ़ने के लिए, क्योंकि यह केवल प्राप्तकर्ता है। इसलिए, बाध्यकारी केवल OneWay होना चाहिए।
  • डेटाकॉन्टेक्स्ट असाइन करना: आप अपने मॉडल जैसे मेनव्यूमोडेल को आईसीओलेक्शन < बेसव्यूमोडेल > प्रॉपर्टी (जिसमें संग्रह में सभी व्युत्पन्न उदाहरण होंगे) या सीधे मॉडल (जैसे आपके मामले में) के साथ आवंटित कर सकते हैं। जैसा कि मैंने नीचे कोड में किया है।

कोड

namespace WPFTestBinding.DataAccess 
{ 
    class Test 
    { 
     public string TestID { get { return "This is my test"; } } 
    } 
} 

public partial class MainWindow : Window 
{  
    public MainWindow() 
    { 
     InitializeComponent(); 

     DataAccess.Test testInstance = new Test(); 
     this.DataContext = testInstance; 
    } 
} 

XAML

<TextBox Text="{Binding Path=TestID, Mode=OneWay}" x:Name="txtTestID" /> 

अधिक देखें:

+0

महान अंक, मेरे उदाहरण के लिए मैं अपनी संपत्ति के लिए 'सेट' विधि जोड़ने के बारे में चिंतित नहीं था लेकिन कभी-कभी इससे कोई फर्क नहीं पड़ता। मोड पर जानकारी जोड़ने के लिए धन्यवाद। मैंने आपके पहले दिए गए दो पहले लिंक देखे थे लेकिन आपके द्वारा दिए गए डेटाकॉन्टेक्स्ट पर दो लिंक बहुत अच्छे हैं। – djangojazz

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