2013-07-09 4 views
0

Мне нужно передать CommandParameter GridControl для сериализации макета.Связывание с ElementName из дочернего usercontrol

Моя кнопка для выполнения команды находится в дочернем пользовательском контроле.

Я успешно использую RelativeSource, чтобы добраться до Grid, который содержит GridControl.

Редактировать: Эта кнопка находится в usercontrol с именем 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 Error: 40: BindingExpression ошибки пути: свойство 'gridControl1' не найдено 'объекта' '' Сетку '(Name = 'GridView')'. BindingExpression: Path = gridControl1; DataItem = 'Grid' (Name = 'GridView'); целевым элементом является «Button» (Name = ''); target свойство - «CommandParameter» (тип «Object»)

Путь = gridControl1 должен быть действительно ElementName = gridControl1 ... но ElementName не работает с RelativeSource ... поэтому я читаю.

+0

Пожалуйста, поделитесь своим Xaml gridview – saamorim

+0

Я скопировал код, но забыл вставить в вопрос. Оригинальный вопрос, отредактированный с помощью xaml. – faldeland

ответ

0

Path в Binding должен представлять объект недвижимости. Вы можете создать это для своего GridControl, добавив свойство оболочки к Grid.xaml.cs, которое просто возвращает поле gridControl1, которое уже создано для вас из-за x:Name, установленного в XAML.

public object MyGridControl 
{ 
    get { return gridControl1; } 
} 

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

Вы должны также рассмотреть вопрос о попытке перестроить приложение, чтобы избежать необходимости передать управление UI в качестве параметра команды, особенно необходимости выходить за пределы локальной области, как вы делаете здесь. Теперь, когда он настроен, элементы управления очень тесно связаны.

 Смежные вопросы

  • Нет связанных вопросов^_^