2011-08-25 10 views
6

tengo esta sencilla aplicación que añade algunos elementos a un cuadro combinado:Conjunto DataContext en 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"); 
     } 
    } 

Y aquí está el archivo 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> 

Puede alguien mostrar cómo se puede poner la DataContext del archivo xaml en lugar de inicializar en el constructor?

Gracias.

Respuesta

23

sólo cambia el Window de obligar DataContext a sí mismo:

<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

Creo que el DataContext en este escenario es implícito y no tiene que establecerse ya que está usando el código detrás. Si estuviera usando MVVM, agregaría una referencia a esa carpeta y clase dentro de su marcado XAML y establecería la clave de recurso igual a un valor que luego se puede declarar como el DataContext dentro de una propiedad DataContext de elementos secundarios. Pero en su caso (ya que no está usando MVVM) no debería tener que hacer eso.

Cuestiones relacionadas