2011-08-25 32 views
6

mam to prosta aplikacja, która dodaje pewne elementy do combobox:Set DataContext w 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"); 
     } 
    } 

A oto plik 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> 

Czy ktoś może mi pokazać, w jaki sposób można ustawić DataContext z pliku xaml zamiast inicjować w konstruktorze?

Dzięki.

Odpowiedz

23

Wystarczy zmienić Window związać DataContext sobie:

<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

Wierzę, że DataContext w tym scenariuszu jest niejawny i nie musi być ustawiony, ponieważ używasz kodu z tyłu. Jeśli korzystasz z MVVM, dodaj odniesienie do tego folderu i klasy w twoim znaczniku XAML i ustaw klucz zasobów równy wartości, która może być następnie zadeklarowana jako DataContext wewnątrz elementu child DataContext. Ale w twoim przypadku (ponieważ nie korzystasz z MVVM) nie powinieneś tego robić.

Powiązane problemy