WPF组合框绑定问题

本文关键字:问题 绑定 组合 WPF | 更新日期: 2023-09-27 18:07:06

我正在尝试将类的ObservableCollection绑定到数据网格中的组合框。

public class ProductContainer
{
    public string Product { get; set; }
    public List<string> SubProducts { get; set; }
    public ProductContainer()
    {
        SubProducts = new List<string>();
    }
}

在我的主窗口。我有一个列表。

public ObservableCollection<ProductContainer> Products { get; set; }

我试图将它添加到一个组合框与我所拥有的数据网格,但它没有正确绑定。xaml是什么样的?


<DataGrid AutoGenerateColumns="False" Name="ProductGrid" Width="Auto"
          AlternatingRowBackground="LightSlateGray" SelectionMode="Single" SelectionUnit="FullRow"  CanUserAddRows="True" CanUserDeleteRows="True" CurrentCellChanged="ProductGrid_CurrentCellChanged">
    <DataGrid.Resources>
        <DataTemplate x:Key="editProductTemplate">
            <ComboBox x:Name="cbProducts" ItemsSource="{Binding Path=Products, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" SelectedItem="{Binding Product}" SelectedValuePath="Product" DisplayMemberPath="Product"/>
        </DataTemplate>
        <DataTemplate x:Key="editSubProductTemplate">
            <ComboBox ItemsSource="{Binding Product.SubProducts, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTemplateColumn MinWidth="120"
            Header="Product"              
            CellTemplate="{StaticResource editProductTemplate}" />
        <DataGridTemplateColumn MinWidth="120"
            Header="SubProduct"                          
            CellTemplate="{StaticResource editSubProductTemplate}"/>
    </DataGrid.Columns>
</DataGrid>

这是它的示例。第一个组合框会填充,但第二个组合框不会根据第一个组合框中的内容填充,也不会显示任何内容。

WPF组合框绑定问题

取决于DataContexts。有关如何调试绑定的信息,请参阅MSDN,这总是有用的,并且有相关的问题可以帮助您构建正确的绑定并避免失败:

  • 如何在ItemSource之外绑定DataGridComboBoxColumn
  • WPF Datagrid ComboBox databbinding

第二个ComboBox.ItemsSource的路径应该是SubProducts,因为对象的Product属性只是一个字符串。此外,您的类应该实现INotifyPropertyChanged,以便任何更改都可以通知UI。