【问题标题】:Binding to ElementName from a child usercontrol从子用户控件绑定到 ElementName
【发布时间】:2013-07-07 03:44:33
【问题描述】:

我必须传递 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 路径错误:在“对象”“网格”(名称=“GridView”)上找不到“gridControl1”属性。绑定表达式:路径=gridControl1; DataItem='Grid' (Name='GridView');目标元素是 'Button' (Name='');目标属性是'CommandParameter'(类型'Object')

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

【问题讨论】:

  • 请分享你的gridview Xaml
  • 我复制了代码,但忘记粘贴问题。使用 xaml 编辑的原始问题。

标签: wpf xaml binding relativesource


【解决方案1】:

Binding 中的Path 需要表示一个属性。您可以通过将包装器属性添加到 Grid.xaml.cs 为您的 GridControl 创建此属性,该属性仅返回由于 XAML 中设置的 x:Name 而为您创建的 gridControl1 字段。

public object MyGridControl
{
  get { return gridControl1; }
}

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

您还应该考虑尝试重构您的应用程序以避免需要将 UI 控件作为命令参数传递,尤其是像您在此处所做的那样需要超出本地范围。现在的设置方式,控件耦合非常紧密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多