Binding property with parent ViewModel

18,358

Basically, you need to use a RelativeSource binding. The standard way is to find an ancestor (or parent) of the control of a particular type:

{Binding DataContext.PropertyName, RelativeSource={RelativeSource FindAncestor, 
    AncestorType={x:Type YourViewsNamespace:YourParentView}}}

Assuming that your parent view has a view model set to its DataContext, this binding will access it... the DataContext is the DataContext of the view, eg. the view model that is set as the DataContext. So, the PropertyName property is a public property from that view model.

Regarding the part of your question that has been asked so many times before, please see the following links (or just search online):

Context Menus in WPF

Binding ContextMenu to its logical Parent

Share:
18,358
WpfBegnner
Author by

WpfBegnner

Updated on July 30, 2022

Comments

  • WpfBegnner
    WpfBegnner almost 2 years

    Please refer to How can I tell my DataTemplate to bind to a property in the PARENT ViewModel?

    I have similar problem... But this solution didn't work for me. I have a MainViewModel which has an observable collection of another view model say View1/ViewModel1. This view has a tree control and I need context menu for the tree. My main view has a menu. Those main menu and context menu are connected. So how can I bind the context menu commands to the main viewmodel's properties?

  • WpfBegnner
    WpfBegnner over 10 years
    I have tried your solution..But it didnt give me the answer. I gone through your refernce sites also..But they too didnt help me. I tried in the following way............ <ContextMenu > <MenuItem x:Name="CopyItem" Header="Copy" Command="{Binding DataContext.CopyCmnd, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MainPanel}}}" /> </ContextMenu>