2011-06-23 2 views
1

У меня есть graph, отображающий несколько моделей. Внешний вид этих режимов просмотра на графике определяется набором DataTemplates.Установите выбранный элемент из DataTemplate

Я хочу сделать представление «Мастер-деталь», так что, когда выбрана одна из моделей просмотра на графике, детали отображаются на другой части пользовательского интерфейса. Проблема, с которой я сталкиваюсь, - это захват щелчка мыши по графику.

Я могу добавить свойство к своему графу под названием «SelectedItem», а затем привязать к нему представление деталей, но я не знаю, как установить базы SelectedItem на клик на DataTemplate.

Типичная DataTemplate показано на графике:

<!-- The master control --> 
<Grid> 
    <Grid.Resources> 
     <DataTemplate DataType="{x:Type prove:JobVM}"> 
       <!-- the view of this type in the Graph --> 
     </DataTemplate> 
    </Grid.Resources> 

    <prove:CustomGraph Graph={Binding JobGraph}/> 
</Grid>       

<!-- The detail control --> 
<ContentControl Content="HOW DO I SET CONTENT TO BE THE SELECTED ITEM IN THE GRAPH?" > 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type prove:JobVM}"> 
      <!-- the detail view --> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 

Любые идеи?

ответ

1

Вы можете добавить обработчик событий MouseLeftButtonDown на графе и проверить обработчик элемента через какой-либо тег, затем вы можете получить datacontext и обновить свойство соответствующим образом на viewmodel вашего представления. Затем вы можете привязать раздел сведений о своем представлении к этому свойству.

Надеюсь, что это поможет :)

+0

Спасибо, это работает. Любая идея, если есть способ сделать это с помощью команды или в разметке, а не для кастования и получения DataContext в обработчике событий? Я бы предпочел это, но я понимаю, что использую настраиваемый элемент управления, который я не разрабатывал, поэтому это может усложнить ситуацию. –

0

Вы должны иметь возможность получить SelectedItem через свойство RelativeSource.TemplatedParent.

+0

Не уверен, что я следую. См. Разъяснение выше. Как использовать свойство RelativeSource.TemplatedParent? –

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