Установить DataContext в XAML - PullRequest
       0

Установить DataContext в XAML

6 голосов
/ 25 августа 2011

У меня есть это простое приложение, которое добавляет некоторые элементы в комбинированный список:

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>

Может кто-нибудь показать мне, как я могу установитьDataContext из файла xaml вместо инициализации в конструкторе?

Спасибо.

Ответы [ 2 ]

24 голосов
/ 25 августа 2011

Просто измените Window для привязки DataContext к себе:

<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 голосов
/ 25 августа 2011

Я полагаю, что DataContext в этом сценарии неявный и не должен быть установлен, так как вы используете код позади.Если бы вы использовали MVVM, вы бы добавили ссылку на эту папку и класс внутри вашей разметки XAML и задали для ключа ресурса значение, которое затем может быть объявлено как DataContext внутри свойства DataContext дочерних элементов.Но в вашем случае (поскольку вы не используете MVVM) вам не нужно этого делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...