2013-12-12 33 views
0

我想只切換View的一部分(即UserControl)xaml。 例如,我想只能更改2nd Grid。在View中切換部分xaml(Caliburn.Micro)

<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <Grid Name="2" Grid.Row="2"/> 
</Grid 

我已經試過某事像這樣:

<UserControl.Resources> 
    <ControlTemplate x:Key="UsualMode"> 
     <Grid> 
     ... 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 
<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <ControlTemplate Name="2" Grid.Row="2" Template="{StaticResource UsualMode}"/> 
</Grid> 

然後,通過使用觸發器和結合我將能夠切換模板。 不幸的是,由於'Bootstrapper.cs not found'異常,這對我無效。 我該怎麼做?我不能使用導體 - >必須只加載一個視圖。

+0

出你希望能夠在同一視圖模型切換視圖?如果Caliburn Micro支持這種開箱即用的方式,請查看「View.Context」附加屬性和CM文檔。 – Charleh

+0

「我不能使用導體 - >必須只加載一個視圖。」 只有一個View,但這個View的內容可切換。 –

回答

1

http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions

在視圖分辨率的基礎知識閱讀了

基本上你將創建你的觀點如下:

<UserControl.Resources> 
    <ControlTemplate x:Key="UsualMode"> 
     <Grid> 
     ... 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 
<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <ContentControl x:Name="ChildViewModel" cal:View.Context="{Binding ContextBinding}" /> 
</Grid> 

你父視圖模型需要有一個「語境」財產和一個房子的孩子VM:

public class ParentViewModel 
{ 
    public SomeViewModel ChildViewModel { get; private set; } 

    public string ContextBinding { get; private set; } // make sure you implement INPC on these properties as is the usual 
} 

您的觀點將根據ContextBinding字符串(按照上述CM慣例)進行解析。

所以,如果你要更新字符串:

ContextBinding = "DetailedView"; 

CM然後將更新用戶界面,並試圖尋找一個視圖在當前虛擬機的命名空間

的子名字空間稱爲DetailedView如果你不不想擁有一個虛擬的虛擬機,實際上你可以讓CMs的約定早些時候啓動並在當前的虛擬機上應用一個上下文,但是在這種情況下,你需要創建兩個視圖,這些視圖與你所在的區域幾乎相同喜歡'換出'。

我更傾向於將創建一個子虛擬機來處理子區域,將交換意見,我上面