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

It is possible to bind collection of different viewmodels in some viewcollection (c# XAML WPF)?

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}"/>

那么,如何在这个地方做出不同的看法。

谢谢。

如果我理解正确,那么你想要基于视图模型更改视图。

如果要根据ViewModel动态切换Views,用DataTemplates比较合适:

<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.