2016-02-19 54 views
0

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

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

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

谢谢。

+0

做我不知道你问这里有什么最好的例子。请尝试添加更多的细节到你的问题,最好是代码,如果可能的话。 – kskyriacou

+0

这是一个畸形问题的地狱。没有代码,什么是假装没有诚意.... – sexta13

回答

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一个实例,然后ViewA将会显示出来,Window.DataContextViewModelB一个实例,那么将显示ViewB

我见过读它是由Rachel Lim. See the example.

+1

你是我的英雄!谢谢!它像预期的一样工作! – David

+0

@大卫我真的很高兴我帮助你!:) – StepUp