【问题标题】:ComboBox in DataGridTemplateColumn. Binding not workingDataGridTemplateColumn 中的组合框。绑定不起作用
【发布时间】:2013-02-19 21:28:42
【问题描述】:

在我的 WPF 窗口中,我声明了以下内容:

public List<Brand> BrandList;

然后在构造函数中填充列表:

BrandList = new List<Brand>(EntityDao.GetInstance().GetProducts().Select(p => p.Brand).Distinct().OrderBy(b => b.Name));

然后在我的 XAML 代码中,我声明了一个 DataGrid:

<DataGrid <!-- Properties omitted--> >
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding Path=BrandList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <!-- Other columns omitted -->
    </DataGrid.Columns>
</DataGrid>

问题是我的组合框是空的。通过调试,我验证了BrandList对象包含80多个对象,所有对象都定义了ToString()方法。

DataGrid 的 ItemsSource 是一个简单的 ObservableCollection。

有什么想法吗?

【问题讨论】:

  • 如果将绑定的 traceLevel 设置为高,是否会得到任何调试信息?:
  • 使用 WPF 检查器之类的工具,您可以检查您的绑定是否有错误,当您测试很多东西时它可能会有所帮助...
  • 我收到很多以 System.Windows.Data 结尾的警告警告:69 : BindingExpression (hash=33514934): Found data context element: (OK)
  • 以及您在示例中设置数据上下文的位置?
  • 我没有。但是RelativeSource 还不够吗?

标签: c# wpf data-binding datagrid combobox


【解决方案1】:

绑定适用于属性,并且您声明了一个公共成员。 你应该这样定义你的列表:

public List<Brand> BrandList { get;set;}

【讨论】:

  • 确实如此。数据网格绑定到 ObservableCollection
  • 在调用 InitializeComponents()(或实现 INPC)之前尝试填充列表
猜你喜欢
  • 2012-04-21
  • 2011-09-06
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多