Выбор шаблона и создание ViewModel - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть ItemsControl с ItemTemplateSelector, и для какого-то шаблона мне нужно создать ViewModel (я могу использовать ViewModelLocator, если необходимо) с параметром. Как мне это сделать ? Является ли использование конвертера единственным способом?

<DataTemplate x:Key="DataGridTemplate">
        <Control:MyView DataContext="???CreateViewModelWithParameter" />
    </DataTemplate>

1 Ответ

0 голосов
/ 22 февраля 2012

Используйте ObjectDataProvider, а затем привяжите контекст данных.

Для наглядности в приведенном ниже примере сделайте это для кнопки. Сделайте то же самое для управления кнопками. В итоге вы получите окно и кнопку с текстом «Джо».

Просмотр модели:

public class MyVM
{
    public string name { get; set; }
    public MyVm( string n ) {
        name = n;
    }
}

Вид:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:clr="clr-namespace:System;assembly=mscorlib"
    xmlns:so="clr-namespace:SO"
    Width="300" Height="200"
    x:Class="SO.MainWindow"
    Title="SO Sample"
    >
    <Window.Resources>
        <ObjectDataProvider x:Key="datasrc" ObjectType="{x:Type so:MyVm}">
            <ObjectDataProvider.ConstructorParameters>
                <clr:String>Joe</clr:String>
            </ObjectDataProvider.ConstructorParameters>            
        </ObjectDataProvider>
    </Window.Resources>
    <Button DataContext="{Binding Source={StaticResource ResourceKey=datasrc}}" Content="{Binding Path=name}" />
</Window>
...