Wpf 从子usercontrol绑定到ElementName

Wpf 从子usercontrol绑定到ElementName,wpf,xaml,binding,relativesource,Wpf,Xaml,Binding,Relativesource,我必须传递GridControl的CommandParameter来序列化布局 我执行命令的按钮位于子用户控件中 我正在成功地使用RelativeSource访问包含GridControl的网格 编辑: 此按钮位于名为GridSettings.xaml的用户控件中。这是Grid.xaml的子级 <Button Content="Save Defaults" Command="{Binding SaveDefaultsCommand}" Width="90" CommandParameter

我必须传递GridControl的CommandParameter来序列化布局

我执行命令的按钮位于子用户控件中

我正在成功地使用RelativeSource访问包含GridControl的网格

编辑: 此按钮位于名为GridSettings.xaml的用户控件中。这是Grid.xaml的子级

<Button Content="Save Defaults" Command="{Binding SaveDefaultsCommand}" Width="90" CommandParameter="{Binding Path=gridControl1, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2}}"/>
下面是Grid.xaml父视图的相关部分

                <Grid Grid.Row="1" x:Name="GridView">
                <dxg:GridControl x:Name="gridControl1"  ItemsSource="{Binding WeldReports}" AutoPopulateColumns="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="Loaded">
                            <Custom:EventToCommand Command="{Binding GridLoadedCommand}"/>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                    <dxg:GridControl.View>
                        <dxg:TableView Name="tableView1" ShowTotalSummary="True" />
                    </dxg:GridControl.View>
                </dxg:GridControl>
            </Grid>
我得到的错误是: System.Windows.Data错误:40:BindingExpression路径错误:在“object”Grid“Name='GridView'上找不到“gridControl1”属性。BindingExpression:Path=gridControl1;DataItem='Grid'名称='GridView';目标元素是“按钮”名称=;目标属性为“CommandParameter”类型“Object”

Path=gridControl1实际上应该是ElementName=gridControl1…但是ElementName不适用于RelativeSource…所以我读到。

绑定中的路径需要表示属性。您可以通过向Grid.xaml.cs添加一个包装器属性来创建GridControl,该属性只返回已经为您创建的gridControl1字段,因为在xaml中设置了x:Name

public object MyGridControl
{
  get { return gridControl1; }
}

CommandParameter="{Binding Path=MyGridControl, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2}}"

您还应该考虑尝试重构应用程序,以避免需要将UI控件作为命令参数传递,特别是需要在这里做的时候超出本地范围。现在控件的设置方式是紧密耦合的。

请分享您的GridViewXAML。我复制了代码,但忘了粘贴到问题中。原始问题用xaml编辑。