是否可以在某些视图集合中绑定不同视图模型的集合(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.DataContext
是ViewModelA
的实例,则显示ViewA
,Window.DataContext
是ViewModelB
的实例,则ViewB
将显示。
我见过和读过的最好的例子是 Rachel Lim. See the example.
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.DataContext
是ViewModelA
的实例,则显示ViewA
,Window.DataContext
是ViewModelB
的实例,则ViewB
将显示。
我见过和读过的最好的例子是 Rachel Lim. See the example.