我制作了一个主窗口,在内容控件中显示各种用户控件。在此窗口中,我将 XAML 中的用户控件及其随附的视图模型作为 DataTemplate 资源。这个窗口有一个按钮,需要在 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 中获取带有 x:Key="EmployerSetup" 的 DataTemplate 的名称?如果重要的话,我也在使用 MVVMLight