在MVVM WPF应用程序中打开新窗口

时间:2014-07-14 14:16:47

标签: c# wpf xaml mvvm

我有一个使用PRISM的WPF MVVM应用程序。我有一个工具栏UserControl,它绑定到ViewModel,因此它可以调用ViewModel上的命令,如下所示:

 <ToolBar Height="auto">
        <Button Content="New"/>
        <Button Content="Edit" Command="{Binding Path=EditCommand}" CommandParameter="{Binding SelectedItem}"  />
        <Button Content="Refresh"/>
        <Button Content="Delete"/>
        <Button Content="Close"/>
    </ToolBar>

EditCommand在ViewModel中调用以下方法:

 private void Edit(UserViewModel userViewModel)
        {
            // load the edit page 



        }

在Edit方法中,我需要用编辑窗口替换当前窗口。我怎样才能做到这一点?我不想在Edit方法中创建或使用UI元素,因为它违背了MVVM模型体系结构。

1 个答案:

答案 0 :(得分:-1)

为当前窗口创建DataTemplate并创建触发器,将窗口的Template更改为Edit模板。

示例触发器

<Style TargetType="Window">
  <Style.Triggers>
      <DataTrigger Binding="{Binding IsInEditMode}" Value="True">
       <Setter Property="Template" Value="{StaticResource EditModeTemplate}">
      </DataTrigger>
  </Style.Triggers>
</Style>

示例数据模板,假设您只需要TextBox

<DataTemplate x:Key="EditModeTemplate">
  <TextBox/>
</DataTemplate>

Edit方法中,您可以将boolean属性设置为true或false,是否显示编辑窗口。

public void Edit(UserViewModel viewModel)
{
  IsInEditMode = true;
}