2016-09-12 6 views
0

Я хочу отобразить пару экранов одновременно. Отображение только одного экрана прекрасно работает, но когда я переключаю свой проводник на 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> 

я не могу найти причину, почему это не работает. Есть идеи?

EDIT: Моя структура кода выглядит следующим образом:

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> 

Bootstrapper:

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

EDIT: Я понял это! Раньше я хотел создать экземпляр Chart и Legend отдельно, что неправильно. DocumentViewModel должен отвечать только за создание экземпляра ChartDecorator. Внутри ChartDecorator Я могу создать столько классов декораторов, сколько хочу (например, ChartLegendViewModel), и все они нарисованы.

+0

Какой контейнер вы используете? – mvermef

ответ

0

IoC не используется вообще? Во-вторых, вы можете показать нам загрузчик, и XAML поможет избежать. Являются ли эти предметы в отдельной библиотеке? Обычно проводник использует экран или экран IScreen для доступа к «экранам». Таким образом, если DMChartBase не наследует экран (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 все они будут активны «могут взаимодействовать друг с другом», но они не видны из-за ограничений элемента управления, используемых для этого случая (управление вкладками), но если он был изменен на элементы управления элементами, вам все равно необходимо выполнить некоторую работу, поскольку представление Не знаете, как бороться с привязкой вида к viewmodel

+0

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