首页 > 解决方案 > 从另一个 DataTemplate 中绑定引用 DataTemplate

问题描述

我正在尝试从我的 DataTemplate 之外的 DataTemplate 绑定命令。

命令InfoButtonCommand在我的AppSettingsPageViewModel,我找不到将它绑定到我的按钮的方法。

<DataTmplate DataType="{x:Type wizard:AppSettingsPageViewModel}"  x:Name="AppSettingsPageDataTemplate">
    <DockPanel>
        <Grid>
            <dxg:GridControl ItemsSource="{Binding AppSettingsConf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                <dxg:GridColumn FieldName="Key" Header="Key" ReadOnly="True"/>
                <dxg:GridColumn FieldName="Value" Header="Value" />
                <dxg:GridColumn>
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>

                            <!-- The Command Binding -->
                            <Button Content="ClickMe" Command="{
                                Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=2, AncestorType={x:Type DataTemplate}}, Path=InfoButtonCommand}">
                            </Button>

                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>
                </dxg:GridColumn>
            </dxg:GridControl>
        </Grid>
    </DockPanel>
</DataTemplate>

我尝试通过 DataTemplates 类型绑定

<Button Command="{Binding Path=InfoButtonCommand, RelativeSource={RelativeSource AncestorType={x:Type wizard:AppSettingsPageViewModel}}, Mode=TwoWay}">

直接绑定:

<Button Command="{Binding InfoButtonCommand}">

通过名称:

<Button Command="{Binding ElementName=AppSettingsPageDataTemplate, Path=InfoButtonCommand}">

但上述方法似乎都不起作用。任何帮助将不胜感激

标签: c#wpfxamlbinding

解决方案


在这种情况下,正确的 AncestorType 将是AncestorType={x:Type dxg:GridControl}

该命令可以通过Path=DataContext.InfoButtonCommand

<DataTemplate DataType="{x:Type wizard:AppSettingsPageViewModel}"  x:Name="AppSettingsPageDataTemplate">
    <DockPanel>
        <Grid>
            <dxg:GridControl ItemsSource="{Binding AppSettingsConf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                <dxg:GridColumn FieldName="Key" Header="Key" ReadOnly="True"/>
                <dxg:GridColumn FieldName="Value" Header="Value" />
                <dxg:GridColumn>
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>

                            <!-- The Command Binding -->
                            <Button Content="ClickMe" 
                                    Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dxg:GridControl}}, Path=DataContext.InfoButtonCommand}">
                            </Button>

                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>
                </dxg:GridColumn>
            </dxg:GridControl>
        </Grid>
    </DockPanel>
</DataTemplate>

推荐阅读