2016-02-19 2 views
0

XAML:Можно связать коллекцию разных моделей viewmodels в некотором представлении (C# XAML WPF)?

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

ViewModel:

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.DataContext является экземпляром ViewModelA, то ViewA будет отображаться и Window.DataContext является экземпляром ViewModelB, то отобразится ViewB.

Лучший пример, который я когда-либо видел и читал он сделан Rachel Lim. See the example.

+1

Ты мой герой! Спасибо! Он работает, как и ожидалось !! – David

+0

@David Я очень рад, что помог вам! :) – StepUp