2011-08-25 17 views
6

में मैं इस सरल अनुप्रयोग है कि एक combobox करने के लिए कुछ आइटम कहते हैं: यहाँसेट DataContext XAML

public partial class Window1 : Window 
    { 
     private ObservableCollection<string> _dropDownValues = new ObservableCollection<string>(); 
     public ObservableCollection<string> DropDownValues 
     { 
      get { return _dropDownValues; } 
      set { _dropDownValues = value; } 
     } 

     private string _selectedValue; 
     public string SelectedValue 
     { 
      get { return _selectedValue; } 
      set { _selectedValue = value; } 
     } 

     public Window1() 
     { 
      InitializeComponent(); 
      DataContext = this; 

      DropDownValues.Add("item1"); 
      DropDownValues.Add("item1"); 
      DropDownValues.Add("item1"); 
      DropDownValues.Add("item1"); 
      DropDownValues.Add("item1"); 
      DropDownValues.Add("item1"); 
     } 
    } 

और XAML फाइल है:

<Window x:Class="WpfApplication2.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel HorizontalAlignment="Left" Margin="10"> 
     <ComboBox 
      Margin="0 0 0 5" 
      ItemsSource="{Binding DropDownValues}" 
      SelectedValue="{Binding SelectedValue}"   
      Width="150"/>  
    </StackPanel> 
</Window> 

किसी ने मुझे दिखा सकते हैं कि कैसे मैं सेट कर सकते हैं कन्स्ट्रक्टर में प्रारंभ करने के बजाय xaml फ़ाइल से DataContext?

धन्यवाद।

उत्तर

23

बस खुद को DataContext बाध्य करने के लिए Window बदलने के लिए:

<Window x:Class="WpfApplication2.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" ... /> 
0

मेरा मानना ​​है कि इस परिदृश्य में डेटाकॉन्टेक्स्ट अंतर्निहित है और आपको कोड के पीछे उपयोग करने के बाद सेट करने की आवश्यकता नहीं है। यदि आप एमवीवीएम का उपयोग कर रहे थे तो आप XAML मार्कअप के अंदर उस फ़ोल्डर और कक्षा का संदर्भ जोड़ देंगे और संसाधन कुंजी को उस मान के बराबर सेट करेंगे जिसे बाद में डेटाकॉन्टेक्स्ट संपत्ति के अंदर डेटा कॉन्टेक्स्ट के रूप में घोषित किया जा सकता है। लेकिन आपके मामले में (चूंकि आप एमवीवीएम का उपयोग नहीं कर रहे हैं) आपको ऐसा करने की ज़रूरत नहीं है।