Silverlight. Получите доступ к DataContext таблицы макетов в DataTemplate типа DataGrid CellTemplate? - PullRequest
1 голос
/ 11 марта 2010

Я использую Silverlight 3 для разработки приложения. В моем приложении у меня есть Grid макета (с именем «LayoutGrid»), в котором у меня есть DataGrid (с именем «PART_datagrid») с DataGridTemplateColumns. В LayoutGrid задается DataContext, в котором в качестве свойства указан список лестниц. Этот список Ladders устанавливается как ItemsSource для PART_datagrid.

<Grid x:Name="LayoutRoot">
   <DataGrid x:Name="PART_datagrid" ItemsSource="{Binding Ladders}">
      ...
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Button Name="DeleteLadder" Click.Command="{Binding ElementName=LayoutRoot, Path=DataContext.DeleteLadderCommand}" />

Теперь в одном из DataGridTemplateColumns у меня есть кнопка, которая должна вызвать команду, которая присутствует в DataContext LayoutGrid. Поэтому я попробовал привязку Элемент-Элемент для моей кнопки DataTemplate следующим образом

<Button Name="DeleteLadder" Click.Command="{Binding ElementName=LayoutRoot, Path=DataContext.DeleteLadderCommand}" />

Но, похоже, это не работает. Чего я хочу добиться, так это обработать событие удаления строки DataGrid на родительском уровне DataContext с помощью команды.

Может кто-нибудь предложить, как мне поступить?

Заранее спасибо ...

1 Ответ

2 голосов
/ 13 сентября 2011

Кажется, проблема в том, что каждая строка использует источник данных в качестве своего "нового" типа данных Datacontext. Таким образом, из каждой строки вам нужно выйти из таблицы и указать на что-то более высокое в иерархии, чтобы получить родительский текст данных. Эти решения могут помочь. Решение 2 сработало для меня, когда я столкнулся с той же проблемой.

Решение 1 с использованием локатора

Смотрите это сообщение: Silverlight DataGrid. Привязка шаблонов к ViewModel

Решение 2, использующее определение ресурса вверху и подключение к его текстовому тексту.

<UserControl.Resources>
    <ContentControl x:Key="cc1" Content="{Binding}" />
</UserControl.Resources>

затем используйте что-то подобное в вашей сетке данных

Command="{Binding Source={StaticResource cc1}, Path=Content.DeleteLadderCommand}"

Удачи

...