c# - WPF 新手 - 在 XAML 中设置 ItemsSource 似乎不起作用

标签 c# wpf data-binding xaml combobox

我是 WPF 的新手,正在尝试弄清楚所有这些数据绑定(bind)的东西。当我在我的代码中执行以下操作时,我的 ComboBox 在我运行我的应用程序时被填充:

public NewForm()
{
    InitializeComponent();
    Product.ItemsSource = Products;
}

public List<string> Products
{
    get { return _productsComponents.Keys.ToList(); }
}

但是,在我的 XAML 中,当我有以下内容时,当我运行我的应用程序时,ComboBox 中没有内容:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="138,116,0,0"
          Name="Product" VerticalAlignment="Top" Width="120"
          ItemsSource="{Binding Path=Products}"/>

我引用的东西不正确吗? This tutorial很有帮助,但他从来没有在 XAML 中设置 ItemsSource,总是在 C# 中。

最佳答案

默认情况下,您实际上不是绑定(bind)到表单本身,而是绑定(bind)到分配给 DataContext 属性的对象。这有助于使用 View 模型来管理代码隐藏文件之外的所有数据。

您可以将表单本身分配给构造函数中的 DataContext 属性

DataContext = this;

您还可以通过多种方式中的任何一种绑定(bind)到表单。这是一个:

<Window x:Name="thisWindow" …
    <ComboBox ItemsSource="{Binding Path=Products, ElementName=thisWindow}"…

我不认为 Products 需要是 DependencyProperty 在这里,但不要引用我的话,只要由于集合不会更改,您无需担心更新通知。

关于c# - WPF 新手 - 在 XAML 中设置 ItemsSource 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372363/

相关文章:

C# 登录页面。 SQL 服务器 "sda.Fill(dt); "错误

c# - 自动完成:用 json 数据显示结果

c# - WPF 转换器 - 返回类类型的名称

json - Jackson:通过数据绑定(bind)流式传输 JSON 数组?

c# - 将多个文本框值绑定(bind)到单个属性

c# - CollectionView.View.Refresh 上的内存泄漏

C# 是否可以创建可选的泛型类型约束

c# - 使用 EF6 将参数传递给存储过程

wpf - 如何在拖动 Thumb 时捕获 MouseEnter?

c# - 尝试读取或写入 protected 内存。这通常表明其他内存已损坏