Отображение нескольких экранов в проводнике не работает

Я хочу отображать несколько экранов одновременно. Отображение только одного экрана работает нормально, но когда я переключаю проводник на Conductor<DMChartBase>.Collection.AllActive и добавляю еще один элемент, он все равно отображает только один элемент.

public class DocumentViewModel : Conductor<DMChartBase>.Collection.AllActive
{
    public ChartLegendViewModel ChartLegendVm { get; set; }

    public DocumentViewModel()
    {
         ChartLegendVm = new ChartLegendViewModel();
         ActivateItem(ChartLegendVm);
    }

    public void ChangeChart(DMChartBase chart, Column[] columns)
    {
        ActivateItem(chart);
        Items.Last().Init(columns);
        Items.Refresh();
    }
}

И DocumentView:

<ItemsControl x:Name="Items"></ItemsControl>

Я не могу найти причину, по которой это не работает. Любые идеи?

РЕДАКТИРОВАТЬ: Моя структура кода выглядит так:

public class ShellViewModel : Screen
    public class DocumentViewModel : Conductor<DMChartBase>.Collection.AllActive
        public class ChartLegendViewModel : ChartDecorator
            public abstract class ChartDecorator : DMChartBase
                 public abstract class DMChartBase : Screen

DocumentView:

<UserControl ...>
    <Grid>
        <ItemsControl x:Name="Items">
    </Grid>
</UserControl>

ChartLegendView:

<UserControl ....>
    <ListView>
        <ListViewItem Content="First value"></ListViewItem>
        <ListViewItem Content="Second value"></ListViewItem>
        <ListViewItem Content="Third value"></ListViewItem>
    </ListView>
</UserControl>

Загрузчик:

protected override void OnStartup(object sender, StartupEventArgs e)
{
    DisplayRootViewFor<ShellViewModel>()
}

РЕДАКТИРОВАТЬ: Я разобрался! Раньше я хотел создать отдельно Chart и Legend, что неверно. DocumentViewModel должен отвечать только за создание экземпляров ChartDecorator. Внутри ChartDecorator я могу создать столько классов-декораторов, сколько захочу (например, ChartLegendViewModel), и все они будут нарисованы.


person FCin    schedule 12.09.2016    source источник
comment
какой контейнер вы используете?   -  person mvermef    schedule 13.09.2016


Ответы (1)


IoC вообще не используется? Во-вторых, не могли бы вы показать нам загрузчик, и XAML немного поможет. Эти предметы находятся в отдельной библиотеке? Обычно Conductor использует Screen или IScreen для доступа к сроку службы «экранов». Поэтому, если DMChartBase не наследует screen (IScreen), я не думаю, что вы получите активацию ...

//MEF IoC Container -- CM Built-in
[Export(typeof(MainWindowViewModel))]
public class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
    [ImportingConstructor]
    public MainWindowViewModel([ImportMany]IEnumerable<IScreen> screens)
    {
        DisplayName = "COmposition Example - CM";


        Items.AddRange(screens.Reverse());
    }

    protected override void OnActivate()
    {
        ActivateItem(Items[0]);
    }
}

в качестве примера ... Он показывает все из них, но только один активен, если вы измените его на AllActive, все они будут активны "могут взаимодействовать друг с другом", но они не видны из-за ограничений элемента управления, используемого в этом случае (элемент управления вкладкой), но если он был изменен на элементы управления, вам все равно нужно поработать, поскольку представление не знает, как справиться с привязкой представления к модели представления

person mvermef    schedule 14.09.2016
comment
IoC не использовал, все в одном проекте. Это очень простая настройка, потому что я просто хотел добавить шаблон декоратора, который обертывает легенду для моих диаграмм. Я очень удивлен, что это не работает, если честно. DMChartBase - это просто экран с дополнительными параметрами для моих диаграмм, такими как столбцы, имя и т. Д. Я обновил свой вопрос, чтобы вы могли видеть, как выглядят представления. - person FCin; 14.09.2016