Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模板选择器和ViewModel的创建_C#_.net_Wpf_Mvvm_Mvvm Light - Fatal编程技术网

C# 模板选择器和ViewModel的创建

C# 模板选择器和ViewModel的创建,c#,.net,wpf,mvvm,mvvm-light,C#,.net,Wpf,Mvvm,Mvvm Light,我有一个带有ItemTemplateSelector的ItemsControl,对于某些模板,我需要创建一个带有参数的ViewModel(如果需要,我可以使用ViewModelLocator)。我怎么做?使用转换器是唯一的方法吗 <DataTemplate x:Key="DataGridTemplate"> <Control:MyView DataContext="???CreateViewModelWithParameter" /> </D

我有一个带有ItemTemplateSelector的ItemsControl,对于某些模板,我需要创建一个带有参数的ViewModel(如果需要,我可以使用ViewModelLocator)。我怎么做?使用转换器是唯一的方法吗

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

使用ObjectDataProvider,然后绑定数据上下文

为清晰起见,下面的示例为按钮执行此操作。对按钮控件执行相同的操作。您将看到一个窗口和一个按钮,其中有一个文本“Joe”

视图模型:

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>