2015-09-11 56 views
0

我知道,我可以通過畫面切換,如果我做到以下幾點:微卡利 - 顯示畫面同時放

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內。

如何做到這一點?

如何訪問它們?我想在我的ShellView.xaml中將它們放置爲像UserControls一樣。

<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 
} 

實例化視圖模型在您選擇OnInitialized(),OnActivated(的)或構造函數。 ..基本上,如果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