У меня есть меню в моем приложении. Я визуализируя его с помощью иерархического шаблона данных:Командная привязка в иерархическом datatemplate
<MenuItem Header="Main menu" ItemsSource="{Binding ApplicationMenu}" >
<MenuItem.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type tm:RMenuItem}"
ItemsSource="{Binding Path=ChildrenItems}">
<MenuItem Header="{Binding Name}" Command="{Binding RunOperationCommand}" />
</HierarchicalDataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
меню выглядит так, как и должно быть, но команда для каждого пункта меню не уволят! Более того - он не ограничен, что можно увидеть в отладчике: получить доступ к ICommand Property не удалось. Почему это так происходит?
Делать как обычно работает отлично:
<Menu>
<MenuItem Header="SomeHeader" Command="{Binding RunOperationCommand}"/>
<Menu>
Спасибо за РЕПЛ у. Что касается вашей мысли о «родительском» и «локальном» datacontext. Я не понимаю, почему они отличаются. Я предположил, что меню и элементы меню должны выводить родительский datacontext. Разве это не одно из свойств свойства зависимостей, которое имеет datacontext? –
Если в меню и в пунктах меню был одинаковый контекст данных, то {Binding Name} всегда привязывалось бы к тому же имени свойства в этом общем datacontext. Но вы хотите, чтобы имя связывалось с сущностью элемента меню. Следовательно, {Binding RunOperationCommand} имеет тот же эффект, он ищет RunOperationCommand в элементе меню. Отвечает ли он на ваш вопрос? –
О, спасибо! Я понял! –