WPF 将子控件 DataContext 绑定到 HierarchicalDataTemplate ItemsSource 项

WPF binding child controls DataContext to HierarchicalDataTemplate ItemsSource item

我有一组条码,其中包含一组位置。如何将自定义控件的 DataContext 设置为集合中的 Position 项?

    <TreeView ItemsSource="{Binding SelectedPlate.Barcodes}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Positions}"
                                  DataType="{x:Type ControlViewModels:BarcodeViewModel}">

                <TextBox Text="{Binding Code}"/>

                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>

                        <!--The Custom Control that needs to bind to the Position item-->
                        <ControlViews:PositionControl DataContext="{Binding}"/>
                        
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>

    </TreeView>

ItemTemplate 中的根元素继承了 DataContext,因此您可以删除 DataContext="{Binding}"

<TreeView ItemsSource="{Binding SelectedPlate.Barcodes}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Positions}"
                                  DataType="{x:Type ControlViewModels:BarcodeViewModel}">
            <TextBox Text="{Binding Code}"/>
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <ControlViews:PositionControl />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

PositionControl 中你可以直接绑定到 Position 对象的 public 属性 假设你没有显式设置 DataContext某处的控件。