WPF Composite Windows and ViewModels

I have a WPF Windowthat contains a little UserControls, these controls contain a different one. And now, what is the most important way to create ViewModelfor this window and to bind it.

I expect that you first need to create one ViewModelfor each of the sub-controls.

+5
source share
4 answers

There are several ways to do this.

Insert VM

I would recommend this method.

If your window is created in a class App, for example

var window = new MyWindow();
window.Show();

I would assign a virtual machine before displaying the window:

var window = new MyWindow();
window.DataContext = GetDataContextForWindow();
window.Show();

, VM wile, .

DataBind

, DataContext , VM.

<Controls:MyControl DataContext={Binding MyControlsVm} />

init ,

public MyWindow()
{
    InitializeComponent();
    DataContext = CreateViewModel;
}

, :

public MyWindow()
{
    InitializeComponent();
    DataContext = this;
}

VM.

+4

ViewModel, , WPF ViewModel, .

Locator, , , .

ResourceDictionary , WPF IValueConverter View, ViewModel.

, :

app.xaml:

<Application x:Class="MyApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml" >
    <Application.Resources>
        <ResourceDictionary Source="Resources.xaml"/>
    </Application.Resources>
</Application>

resources.xaml:

<DataTemplate DataType="{x:Type vm:ViewModelBase}">
    <ContentControl Content="{Binding Converter={StaticResource ViewModelConverter}}"/>
</DataTemplate>

DataContext ,

public MainWindow : Window
{
  InitializeComponent();
  DataContext = new MainViewModel();
}

. , MainViewModel, :

public class MainViewModel : ViewModelBase
{
  public ChildViewModel1 Child1 {get;set;}
  public ChildViewModel2 Child2 {get;set;}
}

UserControl, MainViewModel :

<UserControl x:Class="MainView">
  <StackPanel>
    <ContentPresenter Content="{Binding Child1}"/>
    <ContentPresenter Content="{Binding Child2}"/>
  </StackPanel>
</UserControl>

, ViewModelConverter View - .

+1

, , ? , , , (, ).

0

WPF Application Framework (WAF). , Views ViewModels .

-1

All Articles