2014-11-03 23 views
0

我有一個正確使用Caliburn.Micro的View/ViewModel對。如何使用Caliburn.Micro而不是這些DataTriggers應用convention-over-configuration?

視圖裏面,有一個ContentControl中,我想爲ContentControl中不同的模板,其內容被綁定到相同的視圖模型,並根據在視圖模型給定的枚舉屬性的值:

<ContentControl Content="{Binding}"> 
    <ContentControl.Resources> 
     <DataTemplate x:Key="TurnedOffView"> 
      <local:TurnedOffView/> 
     </DataTemplate> 
     <DataTemplate x:Key="DeviceReadyView"> 
      <local:DeviceReadyView/> 
     </DataTemplate> 
    </ContentControl.Resources> 
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
      <Setter Property="ContentTemplate" Value="{StaticResource TurnedOffView}"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding State}" Value="{x:Static local:DeviceStates.Ready}"> 
        <Setter Property="ContentTemplate" Value="{StaticResource DeviceReadyView}"/> 
       </DataTrigger> 
       <!-- More DataTriggers here, one for each state --> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 

我知道Caliburn.Micro可以使用cal:View.Modelcal:View.Context,以便可以將多個視圖綁定到每個ViewModel,但我無法弄清楚如何使用它來避免所有這些冗長。

所以,問題是:

我應該如何使用View.ModelView.Context(並重新命名我的看法)在這種情況下采取Caliburn.Micro約定優於配置方法的優勢在哪裏?

+0

可能會嘗試......然後您的上下文將基於代碼在您的視圖模型中,不必使用視圖優先代碼來構造數據模板。 ContextProp基本上是你的視圖的子視圖(基於命名空間Project.Views.MainView.Main.TurnedOff)ContextProp =「TurnedOff」; – mvermef 2014-11-03 21:22:34

+0

我一直很困惑:在'Project.Views.MainView.Main.TurnedOff'中,名稱空間何處結束,類名是從哪裏開始的?對於'TurnedOff'視圖,我的完全合格的類名應該是什麼? – heltonbiker 2014-11-03 21:32:42

+0

@mvermef謝謝,我想我現在明白了,明天再試一試。同時,如果您想將此作爲答案發布,我會很樂意接受它(如果它有效)(此外,此信息缺失或非常隱蔽,因爲我沒有在文檔中找到它)。 – heltonbiker 2014-11-03 23:19:13

回答

1

<ContentControl cm:View.Model="{Binding}" cm:View.Context="{Binding ContextProp, Mode=TwoWay}" />可能是一些嘗試......然後,你的情況下會在沒有與圖一碼構建的DataTemplates您的視圖模型基於斷碼。 ContextProp基本上是你的視圖的子視圖(基於命名空間Project.Views.MainView.Main.TurnedOff)ContextProp =「TurnedOff」;


啊抱歉..它我怎麼看的文件夾結構(命名空間)...所以不是TurnedOffView的可能是TurnedOff.xaml命名主文件夾下。假設您的主視圖是MainView.xaml,並且您的主Viewmodel是MainViewModel.cs。對困惑感到抱歉。

View.Model可以設置爲執行多個視圖模型,您可能需要考慮框架中的Conductor。但我不認爲這是必要的,因爲你基本上是在上述案例中進行視圖切換。

相關問題