C# WPF组合框数据绑定xaml与代码

C# WPF组合框数据绑定xaml与代码,c#,wpf,binding,C#,Wpf,Binding,我绝对不是WPF方面的专家,所以这可能非常简单。我正在尝试将列表绑定到组合框。它在代码中工作,在xaml中不工作。如果我从构造函数中删除ItemsSource,它将不起作用,这就是我所知道的。我以为我在xaml中有了等价物,但显然不是 xaml: 建造商: public MainWindow() { _availableActions = new List<IMapperAction> {

我绝对不是WPF方面的专家,所以这可能非常简单。我正在尝试将列表绑定到组合框。它在代码中工作,在xaml中不工作。如果我从构造函数中删除ItemsSource,它将不起作用,这就是我所知道的。我以为我在xaml中有了等价物,但显然不是

xaml:


建造商:

    public MainWindow()
    {
        _availableActions = new List<IMapperAction>
                       {
                           new ReplaceAction(),
                           new CollapseAction(),
                           new NewBasedOnAction()
                       };

        InitializeComponent();
        Loaded += OnWindowLoaded;

        comboBox1.ItemsSource = AvailableActions;
    }
public主窗口()
{
_availableActions=新列表
{
新的ReplaceAction(),
新建CollapseAction(),
新NewBasedOnAction()
};
初始化组件();
已加载+=已加载的窗口;
comboBox1.ItemsSource=可用选项;
}

那么,您需要设置主窗口的
DataContext

public MainWindow()
{
    _availableActions = new List<IMapperAction>
                   {
                       new ReplaceAction(),
                       new CollapseAction(),
                       new NewBasedOnAction()
                   };

    InitializeComponent();
    DataContext = this;
    Loaded += OnWindowLoaded;
}
public主窗口()
{
_availableActions=新列表
{
新的ReplaceAction(),
新建CollapseAction(),
新NewBasedOnAction()
};
初始化组件();
DataContext=this;
已加载+=已加载的窗口;
}

正如这里所建议的,您必须设置DataContext

您还可以阅读此链接了解为什么以及何时应使用这两种方法中的哪一种:


哦,我明白了。谢谢为什么它在代码中工作?因为它是将上下文推送到xaml,而不是从xaml进行,这意味着需要一个上下文来“对话”,因为您可以直接设置itemsource,而无需绑定。
public MainWindow()
{
    _availableActions = new List<IMapperAction>
                   {
                       new ReplaceAction(),
                       new CollapseAction(),
                       new NewBasedOnAction()
                   };

    InitializeComponent();
    DataContext = this;
    Loaded += OnWindowLoaded;
}