可以在某些viewcollection(c#XAML WPF)中绑定不同视图模型的集合吗?

时间:2016-02-19 21:43:14

标签: wpf xaml catel

XAML:

<ItemsControl ItemsSource="{Binding Messages}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Views:Message110FirstView DataContext="{Binding}"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

视图模型:

public ObservableCollection<ViewModelBase> Messages
    {
        get { return GetValue<ObservableCollection<ViewModelBase>>(MessagesProperty); }
        set { SetValue(MessagesProperty, value); }
    }
    public static readonly PropertyData MessagesProperty = RegisterProperty("Messages", typeof(ObservableCollection<ViewModelBase>), null);

我的问题与xaml的这一部分有关:

<Views:Message110FirstView DataContext="{Binding}"/>

那么,如何在这个地方制作不同的观点。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您需要基于viewmodel的更改视图。

如果您想根据DataTemplates动态切换Views,则可以使用ViewModel

<Window>
   <Window.Resources>
      <DataTemplate DataType="{x:Type ViewModelA}">
         <localControls:ViewAUserControl/>
      </DataTemplate>
      <DataTemplate DataType="{x:Type ViewModelB}">
         <localControls:ViewBUserControl/>
      </DataTemplate>
   <Window.Resources>
  <ContentPresenter Content="{Binding CurrentView}"/>
</Window>

如果Window.DataContextViewModelA的实例,则会显示ViewAWindow.DataContextViewModelB的实例,然后是ViewB将会显示。

我见过的最好的例子是Rachel Lim. See the example.