我有一个使用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模型体系结构。
答案 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;
}