将数据网格模板列组合框的选定项绑定到数据网格文本列

时间:2016-03-30 20:10:04

标签: wpf data-binding combobox datagrid datagridtemplatecolumn

在我的项目中,我有一个数据网格,其中包含模板列(组合框)和数据网格文本列。如何将数据网格文本列绑定到模板列中组合框的选定项目中的属性。

例如,第一列是包含组合框的模板列,下一列是常规数据网格文本列。如何将文本列文本绑定到模板列中组合框的选定项目中的属性。

我试过这个但却给出了绑定错误

<DataGrid 
Grid.Column="0" 
Grid.Row="3" 
Grid.ColumnSpan="9" 
AutoGenerateColumns="False" 
Margin="5"
CanUserDeleteRows="False" CanUserAddRows="False"
DataContext="{Binding}"
IsEnabled="{Binding EnableControls}" 
ItemsSource="{Binding SalesItemCollection}" 
EnableRowVirtualization="False"
EnableColumnVirtualization="False"
IsSynchronizedWithCurrentItem="False">

<DataGrid.Columns>

    <DataGridTemplateColumn Header="Batch" Width="*">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox x:Name="comboBox"
                          IsEditable="True"
                          MaxDropDownHeight="125"
                          DisplayMemberPath="BatchName"
                          VerticalAlignment="Stretch"
                          VerticalContentAlignment="Center"
                          IsSynchronizedWithCurrentItem="False"
                          SelectedValuePath="BatchId"
                          SelectedValue="{Binding BatchId}"
                          SelectedItem="{Binding Batch}"
                          ItemsSource="{Binding Path=DataContext.BatchColection, 
                          RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>

    </DataGridTemplateColumn>

    <DataGridTextColumn IsReadOnly="True" Header="Expiry   " 
                        Binding="{Binding ElementName = comboBox, Path=SelectedItem.Expirydate}" />


</DataGrid.Columns>

我尝试将Binding ElementName = comboBox更改为Binding Source={x:Reference comboBox}。但它抛出异常。 谁能告诉我一个解决方案。

1 个答案:

答案 0 :(得分:1)

由于您已将所选项目绑定到批处理使用,请尝试此

<DataGridTextColumn IsReadOnly="True" Header="Expiry   " 
                    Binding="{Binding Source=Batch, Path=Title}" />