2015-09-11 4 views
0

Я знаю, что я могу переключаться между экранами, если я делаю следующее:Caliburn Micro - Показать экраны Simultaniously

ShellViewModel.cs

public class ShellViewModel : Conductor<object>.Collection.OneActive 
{ 
    public void ShowFirstScreen() 
    { 
    ActivateItem(new FirstViewModel()); 
    } 

    public void ShowSecondScreen() 
    { 
    ActivateItem(new SecondViewModel()); 
    } 

} 

ShellView.xaml для OneActive

<ContentControl x:Name="ActiveItem" /> 

Но я хочу показать эти экраны одновременно. Поэтому при смене с OneActive до AllActive Нет на экране.

Я знаю, что я могу показать эти экраны, если я использую ItemsControl

ShellView.xaml для AllActive

<ItemsControl ItemsSource="{Binding Path=Items}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <ContentControl cal:View.Model="{Binding}"/> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Но я хочу, чтобы поместить их в случайном порядке в моей ShellView.xaml.

Как это сделать?

Как с ними связаться? Я хочу разместить их как UserControls в моем ShellView.xaml.

<Grid> 
<ContenControl x:Name="Item1 or even the ViewModel name"/> 
<ContenControl x:Name="Item2 or even the ViewModel name"/> 
... 
</Grid> 

ответ

2

В вашем shellview.xaml

<ContentControl x:Name="NameOfViewModel" /> 

В ваших ShellViewModel.cs

public NameOfViewModel NameOfViewModel { 
    get;set; // auto for brevity 
} 

экземпляр ViewModel в выборе OnInitialized(), OnActivated() или в CTOR. .. В принципе, если имя ContentControl соответствует свойству, вы получите экран, как только будет создана экземпляр viewmodel. Нет соответствия экрану.

+0

Спасибо. Почему это не работает, если я изменяю имя ViewModel с NameOfViewModel на _NameOfViewModel? Является ли «__» недопустимым в атрибуте x: Name? – user2799180

+0

https://msdn.microsoft.com/en-us/library/vstudio/ms752290%28v=vs.110%29.aspx Должен соответствовать XamlGrammar, и я не верю, что префикс '_' будет работать. – mvermef

Смежные вопросы