Динамическая загрузка UserControl с помощью MVVM Light Toolkit

Я искал этот сайт и нашел 2 ссылки
как загрузить wpf usercontrol в шаблоне MVVM

MVVM-Light: загрузить UserControl в окно

но я все еще не могу найти ответ на свою проблему и эту ссылку

Шаблон локатора MVVM-Light и многоразовый пользовательский элемент управления

Я не понял .... так вот я излагаю свою проблему, которая может помочь другим борющимся, как я ...

У меня есть MainWindow, который состоит из 2 частей: одна имеет TreeView (UserControl), а другая отображает различные пользовательские элементы управления (с именем DisplayPanel) .... точно так же, как проводник Windows.

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

а мой TreeView сам является пользовательским элементом управления.

Как я могу заставить этот составной пользовательский интерфейс работать, используя MVVM. Также я планирую использовать MVVM light Toolkit. Есть ли здесь что-нибудь, что может помочь ...

Пример будет отличным

Спасибо... :)

Редактировать

My TreeView в UserControl Я создал свойство зависимости в UserControl, которое захватывает выбранный элемент для представления в виде дерева, чтобы я мог использовать это свойство зависимости для заполнения требуемого представления в привязке "MainView" ContentControl .... как вы мне советовали в комментариях. Все до сих пор

Проблема в том, что я хочу отображать данные, содержащиеся в выбранном элементе, и я не могу установить DataContext для UserControls (который будет отображаться справа) для выбранного элемента, так как тогда я не смогу использовать свою модель представления для соответствующий пользовательский элемент управления для команд и других операций

Я тоже пытался решить эту проблему .... Я использовал Посредник (Посланник) в моей модели представления TreeViewUserControl, чтобы отправить сообщение в модель представления Usercontrol (ту, которую мне нужно отображать). Сообщение будет передаваться всякий раз, когда элемент выбран в древовидной структуре. и сообщение содержит выбранный узел. Я забыл упомянуть, что установил контекст данных UserControl для его модели представления, чтобы я мог отображать данные

Но при использовании этого подхода проблема заключается в том, что когда я щелкаю тип узла в первый раз, данные не заполняются, но если тот же тип узла щелкается снова, он заполняется. Что происходит, так это то, что объект UserControls становится доступным, когда элемент дерева щелкается в первый раз и посредник отправляет сообщение. Таким образом, Посредник не может передать сообщение модели представления userControl .....

У меня совершенно нет идеи решать эту проблему дальше .... это мой способ отображения прав пользователя или я должен сделать что-то еще .... полностью запутался .....


person Ankesh    schedule 07.06.2011    source источник
comment
Возможно ли это с помощью MVVM, или мы должны сломать шаблон и использовать Code Behind ....... Я искал его сегодня весь день, но не нашел ничего полезного. :(   -  person Ankesh    schedule 07.06.2011
comment
я специально не связываюсь с набором инструментов MVVM light ..... я мог бы быть подходящим решением ..... если бы я мог получить его, потому что он не позволяет мне закончить то, что я начал .... :(   -  person Ankesh    schedule 23.06.2011


Ответы (1)


Вы можете попробовать определить DataTemplate для каждого типа в ItemsSource в TreeView и вместо конкретный UserControl с правой стороны, просто привяжите TreeView к SelectedItem. В качестве альтернативы вы можете использовать DataTemplateSelector.

Отредактировано для редактирования OP
Вы это сделали?

  • MainWindow имеет TreeView, ItemsSource=Binding MainVM.Items.
  • MainWindow имеет ContentControl, Content=Binding TreeView.SelectedItem.
  • Есть ли где-нибудь в проекте ResourceDictionary, где для каждого возможного типа в MainVM.Items определен шаблон данных?

Какую модель ViewModel (MainVM или ItemVM) вы пытаетесь использовать и почему не можете ее использовать?

person Jake Berger    schedule 07.06.2011
comment
Если я правильно понял ..... DataTemplateSelector автоматически выберет вид на основе привязки к выбранному элементу ... ??? - person Ankesh; 08.06.2011
comment
Как это сделано .... ??? Все мои View - это UserControls, которые будут отображаться с правой стороны .... Каждый userControl имеет свою собственную функциональность ... Мне просто нужно загрузить правильное представление с правильно выбранным узлом ... - person Ankesh; 08.06.2011
comment
Лично я бы сделал следующее: для каждого возможного типа в treeView.ItemsSource определите DataTemplate (в ResourceDictionary), затем с правой стороны создайте ContentControl Content = Binding treeView.SelectedItem. Если DataTemplate определен для type в ResourceDictionary, когда WPF видит type, он автоматически создает то, как он должен выглядеть (из DataTemplate). - person Jake Berger; 08.06.2011
comment
Привет, я попробовал ваше решение, оно работало у меня некоторое время, пока я не столкнулся с проблемой .... может быть, это моя вина, что я не могу использовать его должным образом, я описал это в вопросе .... . - person Ankesh; 23.06.2011
comment
Я думаю: щелкните №1: NodeVM еще не создан, поэтому TreeVM отправляет сообщение без получателя. Щелкните №2: теперь создается NodeVM, поэтому TreeVM отправляет, а NodeVM получает. Вы установили привязки, как я предлагал? Почему вы отправляете сообщение от TreeVM к NodeVM? - person Jake Berger; 02.08.2011