Wpf 从子usercontrol绑定到ElementName
我必须传递GridControl的CommandParameter来序列化布局 我执行命令的按钮位于子用户控件中 我正在成功地使用RelativeSource访问包含GridControl的网格 编辑: 此按钮位于名为GridSettings.xaml的用户控件中。这是Grid.xaml的子级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
<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编辑。