【问题标题】:Change subview with binding [duplicate]使用绑定更改子视图[重复]
【发布时间】:2011-10-03 09:38:30
【问题描述】:

可能重复:
Changing the View for a ViewModel

我有一个看法:

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

我有 ViewModel:

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

我有几个这样的子视图:

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

当用户在主视图中从ComboBox 中选择某个值时,我需要放置在第二列 主要查看subViews 的一些内容。如果用户在ComboBox 中选择其他值,则另一个subView 将替换现有的subView

怎么做?

【问题讨论】:

  • 如果您的问题与我已经回答过的问题相似:stackoverflow.com/questions/5309099/…。我可以重写它,让它使用组合框进行视图切换。
  • 感谢您的链接。我解决了这个问题:)

标签: c# wpf data-binding mvvm view


【解决方案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>

【讨论】:

    【解决方案2】:

    您可以绑定到SelectedItemComboBox,例如

    <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 而不是硬编码一个模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2012-09-02
      • 2020-02-06
      • 2015-03-19
      • 1970-01-01
      • 2019-01-22
      • 2011-10-23
      相关资源
      最近更新 更多