Отображение 2 моделей представления с помощью caliburn.micro - PullRequest
0 голосов
/ 09 мая 2019

Я хочу вывести на экран 2 элемента управления одновременно и позволить им переходить независимо друг от друга. Я использую Conductor.Collection.AllActive, но не могу понять, как получить элемент управления List (экран с именем ProductListViewModel) и подробный экран (ProductViewModel) для одновременного отображения в оболочке.

Как мне заставить их загружаться в соответствующие ContentControls?

    <mah:TransitioningContentControl Grid.Row="2" Grid.Column="1" 
        Margin="5"                             
        x:Name="NavigationFrame"/>

    <mah:TransitioningContentControl Grid.Row="2" Grid.Column="2" Margin="5" 
        x:Name="ContentFrame" />

1 Ответ

0 голосов
/ 10 мая 2019

Я понял это и думаю, что на самом деле все очень просто.ViewModel требуется свойство IScreen для каждой области содержимого, в которое вы хотите поместить независимое представление.

Таким образом, в этом случае это будет

public class ShellViewModel: Screen
{
    private string _title = "Some title";
    private Conductor<IScreen> _listConductor;
    private Conductor<IScreen> _detailConductor;

    public ShellViewModel()
    {
        _listConductor = new Conductor<IScreen>();
        _detailConductor = new Conductor<IScreen>();

        ListFrame = GetContainer().Resolve<ProductListViewModel>();
        DetailFrame = GetContainer().Resolve<ProductViewModel>();
    }

    public string Title { get => _title; set => _title = value; }

    public IScreen ListFrame
    {
        get { return _listConductor.ActiveItem; }
        set {
            _listConductor.ActivateItem(value);
            NotifyOfPropertyChange(nameof(ListFrame));
        }
    }

    public IScreen DetailFrame
    {
        get { return _detailConductor.ActiveItem; }
        set {
            _detailConductor.ActivateItem(value);
            NotifyOfPropertyChange(nameof(DetailFrame));
        }
    }

и т. Д.

...