如何在XAML中访问嵌套属性?

时间:2012-01-27 21:02:29

标签: wpf xaml devexpress

我目前为网格控件提供以下XAML:

<dxg:GridControl x:Name="DXGrid">
   <dxg:GridControl.Columns>
      <dxg:Column FieldName="Field 1" Width="100"/>
      <dxg:Column FieldName="Field 2" Width="100"/>
      <dxg:Column FieldName="Field 3" Width="100"/>
   </dxg:GridControl.Columns>
<dxg:GridControl>

我想将网格移动到UserControl:

<UserControl>
   <Grid>
      <dxg:GridControl x:Name="DXGrid"/>
   </Grid>
</UserControl>

最后,想要实现以下目标:

<Window>
   <Grid>
      <local:MyUserControl>
         <local:MyUserControl.DXGrid.Columns>
            <dxg:Column FieldName="Field 1" Width="100"/>
            <dxg:Column FieldName="Field 2" Width="100"/>
            <dxg:Column FieldName="Field 3" Width="100"/>
         </local:MyUserControl.DXGrid.Columns>
      </local:MyUserControl>
   </Grid>
</Window>

但问题是我收到一条错误,指出“在MyUserControl类型中找不到附加属性DXGrid ”。

如何在XAML中访问DevExpress Grid(嵌套在UserControl中)及其列集合?

1 个答案:

答案 0 :(得分:2)

简短回答 - 你不能。至少不是直接的。

然而,解决这个问题的一种方法是在MyUserControl上放置一个传递属性,它只是将其信息传递给嵌套控件。所以它看起来像:

public static readonly DependencyProperty ColumnsProperty =
    DependencyProperty.Register("Columns", typeof(GridColumnCollection), typeof(MyUserControl));

public GridColumnCollection Columns
{
    get { return (GridColumnCollection)GetValue(ColumnsProperty); }
    set { SetValue(ColumnsProperty, value); }
}

然后在构造函数中将属性设置为内部Columns集合:

public MyUserControl()
{
    InitializeComponent();
    Columns = DXGrid.Columns;
}

现在设置了新属性,您的XAML将如下所示:

<local:MyUserControl>
    <local:MyUserControl.Columns>
        <dxg:Column FieldName="Field1" Width="100"/>
        <dxg:Column FieldName="Field2" Width="100"/>
        <dxg:Column FieldName="Field3" Width="100"/>                
    </local:MyUserControl.Columns>
</local:MyUserControl>

我不熟悉DevEx,所以我猜到了GridColumnCollection的名字。只需在DXGrid上使用Columns属性的任何类型。