WPF 列表控件中的子控件上下文绑定

 

 

      <DataGrid Grid.ColumnSpan="5"  Grid.Column="0"  Grid.Row="1" Grid.RowSpan="2" Height="Auto" 
                          SelectedItem="{Binding Path=SelectProductModel,Mode=TwoWay}" 
                          ItemsSource="{Binding Path=ArriveProductModels,Mode=TwoWay}"
                          Cursor="Hand"  HeadersVisibility="Column"  AutoGenerateColumns="False" CanUserAddRows="False" SelectionUnit="FullRow"  >
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="产品类别" Width="260" Binding="{Binding Path=product_catalog_id,Mode=OneWay, Converter={StaticResource CatalogIdToNameCvter}}"/>
                        <DataGridTextColumn Header="进仓票号" Width="150" Binding="{Binding Path=into_warehouse_no,Mode=OneWay}"/>
                        <DataGridTemplateColumn Header="操作" Width="100">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Content="移除"
                                        Command="{Binding DataContext.RemoveProductCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>

当前项目中,绑定一个ViewModel,

RemoveProductCommand为ViewModel中的属性,
ArriveProductModels也为ViewModel中的属性,这样就造成command绑定无效,因为找不到,这个时候需要
RelativeSource
Command="{Binding DataContext.RemoveProductCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"

 


这样就可以绑定成功了,同样,将Button改为Combox,那么Combox的ItemSource
ItemSource={Binding DataContext.xxxx(数据源集合)
RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}
}

 

 

posted on 2016-10-16 21:44  寇剑  阅读(1032)  评论(0编辑  收藏  举报