2013-12-13 2 views
0

У меня есть два UserControls, 1 содержит только TreeView, а другой будет формой, которая загружается при выборе элемента в TreeView.Если у меня есть 2 UserControls в представлении MainWindow, и я хочу передать свойство между ними, как мне это сделать?

Нравится программа в этом диалоговом окне.

Options Dialog

Я уже столкнулся несколько вопросов с имуществом SelectedItem TreeView, но нашел несколько решений, чтобы получить SelectedItem в любом файле отделенного кода в TreeView, либо в ViewModel.

Мой вопрос: Как передать SelectedItem моего TreeView из UserControl он принадлежит, к ContentControl в том же окне?

Это пример того, что я имею в виду:

<Window x:Class="Project.MainWindow" 
     xmlns:v="clr-namespace:MicroMVVM.View"> 
    <v:TreeViewControl /> <!-- Pass SelectedItem from here --> 
    <ContentControl Content="TreeViewsSelectedItem" /> <!-- To here. --> 
</Window> 
+3

Лично я бы связать 'Con tentControl.Content' в 'MyTreeView.SelectedItem' и использовать' DataTemplates', чтобы сообщить WPF, как рисовать разные типы элементов. У меня есть несколько примеров изменения «DataTemplate» на основе свойства, такого как строка, или использования неявных 'DataTemplates' [здесь] (http://rachel53461.wordpress.com/2011/05/28/switching-between- viewsusercontrols-using-mvvm /) – Rachel

ответ

1

Добавьте свойство правильного типа для вашего любого объекта устанавливается в качестве Window.DataContext, а затем просто привязать к этому значению из двух взглядов детей:

<Window x:Class="Project.MainWindow" 
     xmlns:v="clr-namespace:MicroMVVM.View"> 
    <v:TreeViewControl SelectedItem="{Binding SelectedItem}" /> 
    <ContentControl Content="{Binding SelectedItem}" /> 
</Window> 

Вы могли бы даже быть в состоянии непосредственно связываться:

<Window x:Class="Project.MainWindow" 
     xmlns:v="clr-namespace:MicroMVVM.View"> 
    <v:TreeViewControl Name="TreeViewControl" /> 
    <ContentControl Content="{Binding SelectedItem, ElementName=TreeViewControl}" /> 
</Window> 
+0

Я пытаюсь использовать ваше предложение, однако оно, похоже, не работает для меня. Может быть, я делаю что-то не так? Они представляют собой два разных контекста данных, и когда я пытаюсь связать напрямую, я получаю ошибку: 40: ошибка пути BindingExpression: свойство «SelectedNode» не найдено на «объекте» –

+0

Какой из них не работает? Для первого предложения попробуйте добавить 'DependencyProperty' в файл' MainWindow.xaml.cs' и привязать его к обоим свойствам, как показано ... вам может потребоваться добавить 'Mode = TwoWay' в' Binding'. Второй пример действительно должен работать так, как есть. – Sheridan

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