如何将我的视图模型传递给用户到主视图模型?

时间:2013-06-07 20:34:02

标签: wpf mvvm viewmodel relaycommand

我创建了一个主窗口,在内容控件中显示各种用户控件。在这个窗口中,我将XAML中的用户控件及其附带的视图模型作为DataTemplate Resources。该窗口有一个按钮,需要在contentcontrol中显示用户控件并为其实例化视图模型。如何将资源传递给我的RelayCommand,以便我可以告诉命令使用哪个用户控件和视图模型?我想出了如何传递一个硬编码的字符串作为命令参数,但现在我想传递x:Name,所以我可以重复使用这个命令等多个View-ViewModel。

主窗口的XAML片段:

<Window.Resources>
    <!--User Controls and Accompanying View Models-->
    <DataTemplate DataType="{x:Type EmployerSetupVM:EmployerSetupVM}" x:Key="EmployerSetup" x:Name="EmployerSetup">
        <EmployerSetupView:EmployerSetupView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type VendorSetupVM:VendorSetupVM}">
        <VendorSetupView:VendorSetupView />
    </DataTemplate>
</Window.Resources>

<Button Style="{StaticResource LinkButton}" Command="{Binding ShowCommand}" CommandParameter="{StaticResource EmployerSetup}">

... 在主窗口的ViewModel中,到目前为止这里是相关代码:

public RelayCommand<DataTemplate> ShowCommand
    {
        get;
        private set;
    }

ShowCommand = new RelayCommand<string>((s) => ShowExecuted(s));



private void ShowExecuted(DataTemplate s)
    {
        var fred = (s.DataType);  //how do i get the actual name here, i see it when i hover with intellisense, but i can't access it!


        if (!PageViewModels.Contains(EmployerSetupVM))
        {
            EmployerSetupVM = new EmployerSetupVM();
            PageViewModels.Add(EmployerSetupVM);
        }

        int i = PageViewModels.IndexOf(EmployerSetupVM);

        ChangeViewModel(PageViewModels[i]);
    }

... 换句话说,如何在XAML中获取我的DataTemplate w / x的名称:Key =“EmployerSetup”?如果重要的话,我也在使用MVVMLight

1 个答案:

答案 0 :(得分:1)

尝试使用班级NameType属性:

private void ShowExecuted(DataTemplate s) {
  var typeName = s.DataType as Type;
  if (typeName == null)
    return;
  var className = typeName.Name;  // className will be EmployerSetupVM or VendorSetupVM
  ...
}

我仍然说将DataTemplate传递给VM似乎很奇怪。我只需要两个命令,并根据你获得的条件切换Button.Style中使用的命令。

如果你&#34;有&#34;要使用单个RelayCommand或世界可能会结束,我倾向于使用静态枚举,您可以从xaml引用CommandParameter而不是传递整个DataTemplate对象。