2013-09-10 4 views
4

Пожалуйста, обратитесь к How can I tell my DataTemplate to bind to a property in the PARENT ViewModel?Binding свойства с родителем ViewModel

У меня аналогичная проблема ... Но это решение не работает для меня. У меня есть MainViewModel, который имеет наблюдаемую коллекцию другой модели представления, например View1/ViewModel1. Этот вид имеет дерево управления, и мне нужно контекстное меню для дерева. В главном меню есть меню. Это основное меню и контекстное меню подключены. Итак, как я могу привязать команды контекстного меню к основным свойствам viewmodel?

ответ

11

В принципе, вам необходимо использовать привязку RelativeSource. Стандартный способ найти предок (или родитель) управлений конкретного типа:

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

Если предположить, что ваш взгляд родитель вида модель установлена ​​в DataContext, эта привязка будет обращаться к нему ... DataContext - вид DataContext, например. модель представления, которая установлена ​​как DataContext. Таким образом, свойство PropertyName является общедоступной собственности с этой модели.

Что касается части вашего вопроса, который был задан так много раз, смотрите следующие ссылки (или просто поиск в Интернете):

Context Menus in WPF

Binding ContextMenu to its logical Parent

+0

Я попытался ваше решение. Но это не дало мне ответа. Я тоже прошел через ваши сайты ссылок. Но они тоже не помогли мне. Я попытался следующим образом ............ WpfBegnner

+0

Вам предоставили * больше *, чем достаточную помощь для достижения того, чего вы хотите ... единственное, чего вам не хватает, - это вы * * взятие этих бит информации и объединение их. Если вы потрудились попытаться получить код из связанных статей, работающих в новом приложении WPF, ваше понимание будет расти .... если, однако, вы ожидаете, что кто-то другой сделает всю вашу работу, тогда ваше понимание будет * не * расти. Я дам вам еще один ключ ... вам нужно использовать свойство ContextMenu.PlacementTarget (http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.placementtarget.aspx). – Sheridan

0
1. ParentViewModel has NavigateRecordCommand 

2. Parentview has the DataContext Set to my ParentViewModel. 

<UserControl x:Class="SampleProject.UI.ParentView" 

<Grid> 
    .... 
<!--User control is here--> 
    <local:NavigationControl Grid.Row="1" /> 
    .... 
</Grid> 


3. Child Control as below. Not bounded to its ViewModel. Bounded to Parent Views DataContext i.e. ParentViewModel. 

    <UserControl x:Class="SampleProject.UI.NavigationControl" 
    ... 
    ... 
    xmlns:Local="clr-namespace:SampleProject.UI"> 

    <Button Command="{Binding DataContext.NavigateRecordCommand, RelativeSource={RelativeSource AncestorType=Local:ParentView}}" 
      CommandParameter="MoveFirst"/>   
Смежные вопросы