在XAML中设置DataContext

本文关键字:DataContext 设置 XAML | 更新日期: 2023-09-27 18:06:34

我有一个简单的应用程序,为组合框添加一些项目:

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而不是在构造函数中初始化吗?

谢谢。

在XAML中设置DataContext

只需将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}}" ... />

我认为这个场景中的DataContext是隐式的,不需要设置,因为您正在使用后面的代码。如果您正在使用MVVM,您将在XAML标记中添加对该文件夹和类的引用,并将资源键设置为一个值,然后可以在子元素DataContext属性中声明为DataContext。但在您的情况下(因为您没有使用MVVM),您不应该这样做。