Как получить доступ к вложенным свойствам в XAML? - PullRequest
1 голос
/ 28 января 2012

В настоящее время у меня есть следующий XAML для моего элемента управления Grid:

<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>

Но проблема в том, что я получаю сообщение об ошибке " Присоединенное свойство DXGrid не найдено в типе MyUserControl ".

Как я могу получить доступ к DevExpress Grid (вложенной в UserControl) и его коллекции столбцов в XAML?

1 Ответ

2 голосов
/ 29 января 2012

Краткий ответ - вы не можете. По крайней мере, не напрямую.

Тем не менее, один из способов обойти это - поместить в 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. Просто используйте любой тип свойства Columns в вашей DXGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...