2011-01-26 4 views
2

Я использую FindAncestor и AncestorLevel = 3, чтобы достичь тега верхнего уровня, который должен иметь команду relayModel relay, но он не работает. Любые предложения, если я делаю это неправильно или способ отладить этот сценарий?WPF Binding RelativeSource issue

<DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding name}" Cursor="Hand" 
              Foreground="Blue" TextDecorations="Underline"> 
            <i:Interaction.Triggers> 
             <i:EventTrigger EventName="MouseDown"> 
              <cmd:EventToCommand Command="{Binding NameClickCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid, AncestorLevel=3}}" 
                   MustToggleIsEnabled="True" PassEventArgsToCommand="True"/> 
             </i:EventTrigger> 
            </i:Interaction.Triggers> 
           </TextBlock> 
          </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
+1

Как насчет конкретного кода, так что мы не должны использовать наше стекло мячи? – DHN

+0

Стеклянные шарики! : D – WhoIsNinja

+1

Просто догадаться, быстро взглянув на ваш xaml. Кажется, что вы привязываете команду к свойству, называемому 'NameClickCommand', на' Grid'. 'Grid' не имеет этого свойства, поэтому попробуйте изменить его на' Command = {{Binding Path = DataContext.NameClickCommand ... ', если NameClickCommand находится в DataContext Grid. –

ответ

3

Кажется, что вы привязываете команду к свойству NameClickCommand на гриде. Сетка не обладает этим свойством, поэтому постарайтесь изменить его

Command="{Binding Path=DataContext.NameClickCommand... 

если NameClickCommand находится в DataContext из сетки

1

Вы ищете 3 Grid вверх по иерархии - это то, что вы хотите?

Отметьте, что Grid не включает DataGrid.

+0

Да Я ищу только верхний родительский файл xaml, который является сеткой и находится на 3-м уровне от него. Есть ли ярлык для ссылки на корень? Или ссылается на относительный источник по имени компонента? – WhoIsNinja

+0

Если я добавлю кнопку на том же уровне этого Datagrid и задаю ее команду NameClickCommand, она будет работать. – WhoIsNinja

+0

@ 11000011 ' '...' {Binding DataContext.NameClickCommand, ElementName = rootGrid} ' – Jay

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