Правильный способ поместить несколько компонентов UserControl в окно - PullRequest
0 голосов
/ 02 июля 2011

В любом большом приложении у меня есть такая проблема:

Я строю внешний вид окна, и я хочу, чтобы в нем было, например, меню слева, некоторое содержимое в середине и т. Д.

Теперь, если я хочу повторно использовать некоторые из этих вещей (большую часть) или просто не хочу хранить все это в одном файле xaml, как мне это сделать? До сих пор я делал это так:

  1. Я создаю UserControl + ViewModel для этих компонентов (обычно мне нужно разделить основной вид на два или три компонента)
  2. В главном окне (xaml) я поставил:

    <DockPanel>
            <ContentControl Content="{Binding Menu}" DockPanel.Dock="Left"/>
            <ContentControl Content="{Binding MainStuff}"/>
    </DockPanel>
    
  3. В основной WindowViewModel я положил:

    Menu = new MenuViewModel();
    MainStuff = new MainStuffViewModel();
    

И иногда этим VModel приходится обращаться к MainViewModel, но редко.

Этот подход не очень хорош, потому что я не вижу свой дизайн в редакторе xaml главного окна (иногда я вижу его, я не знаю, возможно, Visual пытается связать перед компиляцией, но иногда это не получается, я не понимаю не хочу об этом думать :))

Что такое профессиональный подход?

Ответы [ 2 ]

1 голос
/ 02 июля 2011

У вас есть соответствующий MenuView для вашего MenuViewModel?

В этом случае вы можете заменить свой ContentControl следующим образом:

<DockPanel>
        <prefix:MenuView DataContext="{Binding Menu}" DockPanel.Dock="Left"/>
        <prefix:MainStuffView DataContext="{Binding MainStuff}"/>
</DockPanel>

Таким образом, вы получите представление дизайна вашего MenuView-и MainStuffView-usercontrols

0 голосов
/ 02 июля 2011

Крупное приложение должно отойти от своей монолитной формы, чтобы его можно было многократно использовать, его можно компоновать - вам нужна Prism .Создайте области для своих разделов и преобразуйте свой контроль использования в представления и внедрите их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...