2011-10-03 76 views
0

可能重複:
Changing the View for a ViewModel更改子視圖與結合

我有一個觀點:

<UserControl ...> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <ComboBox ItemSource="{Binding Items}" /> 
     **<???>** 
    </Grid> 
</UserControl> 

我視圖模型:

public class VM 
{ 
    // ... 
    public List<Entities> Items { get; set;} 
    public String Title { get; set; } 
} 

和我有幾個子視圖是這樣的:

<UserControl ...> 
    <TextBlock Text="{Binding Title}" /> 
</UserControl> 

當用戶從的Selecta在ComboBox主視圖一定的價值,我需要在主視圖中的一些subViews秒列 的地方。如果用戶在ComboBox中選擇其他值,則另一個subView可替代現有的subView

怎麼辦?

+1

如果你的問題是相似的另一個我已經回答了:http://stackoverflow.com/問題/ 5309099 /改變-中,視圖-FOR-A-視圖模型/ 5310213#5310213。我可以重寫它,所以它會使用組合框進行視圖切換。 – vorrtex

+0

感謝您的鏈接。我解決了這個問題:) – Lari13

回答

0

您可以綁定到ComboBoxSelectedItem,例如,

<ComboBox x:Name="cb" ItemSource="{Binding Items}" /> 
<ContentControl Content="{Binding SelectedItem, ElementName=cb}" Grid.Column="1"> 
    <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <v:SubView /> <!-- Bind properties as appropriate --> 
     <DataTemplate> 
    <ContentControl.ContentTemplate> 
<ContentControl> 

如果您有不同意見,請使用ContentTemplateSelector而不是硬編碼一個模板。

1

我通常只使用一個ContentControl,讓它找出哪些視圖中繪製基礎上的DataTemplates

<ContentControl Content="{Binding SelectedView}"> 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type local:ViewModelA}"> 
      <local:ViewA /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:ViewModelB}"> 
      <local:ViewB /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:ViewModelC}"> 
      <local:ViewC /> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl>