Есть DataGrid в которой в DataGridRowDetail нужно сделать binding context menu к главной view model. Как это сделать? Оно сейчас пишет что не может найти property непосредственно в ObservableCollection DataGridRows а мне нужно чтоб оно искало не в коллекции а в view model где коллекция
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=DataContext.OpenEditWindowCommand; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
<TabControl>
<TabItem>
<DataGrid>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid>
<DataGrid.ContextMenu>
<ContextMenu>
<ContextMenu.Items>
<MenuItem Command="{Binding
DataContext.OpenEditWindowCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Window},
UpdateSourceTrigger=PropertyChanged}">
</MenuItem>
</ContextMenu.Items>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</TabItem>
</TabControl>
Дело в том, что контекстное меню лежит отдельно от визуального дерева окна, поэтому FindAncestor
не сработает — он ищет только вверх по дереву. Не сработает здесь и фича ElementName
, потому что она ищет тоже только внутри дерева (хоть и не только вверх).
Что вам поможет — это фича x:Reference
(доступно с .NET 4.0), она ищет по всему XAML. Присвойте в разметке окну имя, например <Window ... Name="w">
и укажите его как источник:
<MenuItem Command="{Binding DataContext.OpenEditWindowCommand,
Source={x:Reference w},
UpdateSourceTrigger=PropertyChanged}">
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть сайт и серверХочу, чтобы клиентам из разных часовых поясов показывалось разное время
Есть дочерний класс, он оверайдит некоторые методы родительскогоИ вопрос в том, как можно заоверайдить только те методы, которые нужны предположим...