Datagrid组合框不绑定属性 - wpf

时间:2016-08-04 08:34:00

标签: wpf combobox datagrid

我有一个带有datagridComboBoxColumn的数据网格。 datagrid的items源是一个名为Products的自定义类,它有一个名为Installer的属性(也是一个名为Contact的自定义类)。

我想将datagridComboBoxColumn itemsSource绑定到所有Contacts,并将comboBox的选定值绑定到Installer。这不行,有人可以帮我一把吗?提前致谢

非常感谢。我看过其他类似的帖子(例如this onethis one),但情况并不完全相同。

我的xaml代码:

 <DataGrid x:Name="productsList" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeRows="False"
              CanUserResizeColumns="True" ColumnWidth="*" GridLinesVisibility="None">
                <DataGrid.Columns>

                    <DataGridTextColumn Header="Ref" 
                                    Binding="{Binding Ref}" 
                                    />
                    <DataGridTextColumn Header="Product" 
                                    Binding="{Binding Product}" 
                                    />
                    <DataGridComboBoxColumn Header="Installer"  SelectedItemBinding="{Binding Installer, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Contacts}"/>

                </DataGrid.Columns>
 </DataGrid>

我的代码隐藏:

 public partial class CatalogPage : Page
{
    ObservableCollection<CatalogProduct> mProductList = new ObservableCollection<CatalogProduct>();

    public ObservableCollection<Contact> Contacts
    {
        get
        {
            return Parent.mContactsPage.GetContacts();
        }
    }

    private LocalConfigurationPage Parent { get; set; }
    public CatalogPage(LocalConfigurationPage localConfigurationPage)
    {
        InitializeComponent();

        Parent = localConfigurationPage;

        productsList.ItemsSource = mProductList;


    }
}

这是CatalogProduct类:

 public class CatalogProduct
{
    public string Ref { get; set; }
    public string Product { get; set; }
    public Contact Installer { get; set; }
}

1 个答案:

答案 0 :(得分:0)

你在这里做错了很多事。

  1. MyFoo出现在Contacts中,因此,CatalogPage无效。这是因为{Binding Contacts}的{​​{1}}是为该行显示的DataContext。对于您的行,它将是DataGridRow,并且那里没有Item

    相反,你必须这样做:

    CatalogProduct

  2. 其次,Contacts存在已知问题,因此请始终使用:

    ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}
  3. 最后,如果您要更新DataGridComboBoxColumn <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox SelectedItem="{Binding Installer, UpdateSourceTrigger=PropertyChanged}}" ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 值,请为ComboBoxColumn实施更改通知,并为Installer设置Installer }。否则,现在它将起作用Mode=TwoWay而不是相反。