如何在调用工具栏项时替换详细信息视图?

时间:2014-07-15 15:56:12

标签: c# wpf

我有一个使用PRISM的WPF应用程序。该申请分为两个部分。左窗格是菜单窗格,右窗格是详细信息窗格。我在容器窗格中也有一个工具栏,它是一个用户控件。

现在,我希望当我单击工具栏选项时,我应该能够用新的用户控件/窗口替换右窗格(详细信息窗格)。我怎样才能做到这一点?目前,我在工具栏编辑按钮中单击以下代码,打开一个新窗口我不想要一个新窗口我想替换右窗格窗口(详细信息)窗口。

private void EditButtonClick(object sender, RoutedEventArgs e)
{
    Window userEditWindow = new Window
    {
        Title = "User Edit",
        Content = new UserEdit(),
        Width = 600,
        Height = 600
    };

    userEditWindow.Show();
}

以下是用户界面的样子:

_______________________________________________________________________
PRISM shell container begins
________________________________________________________________________
                   | User control containing toolbar (edit, new, update, delete)
 menu user control |____________________________________________________
                   |details pane user control
                   |
                   |
__________________________________________________________________                  |_______________________________________________________________

PRISM shell container ends
_________________________________________________________________________

上面你可以看到我的应用程序的布局!正如您所看到的,所有内容都在PRISM shell容器中。我正在处理用户控件工具栏中的用户控件工具栏中的事件,如上所示。我想要的是在单击工具栏时替换详细信息窗格。但我不知道该怎么做?

1 个答案:

答案 0 :(得分:0)

回顾我对previous question的回答。然后,您可以通过将DataEntryContext切换到另一个DataEntryViewModel的新实例来处理Toolbar事件,并使用DataTemplate更改详细信息窗格中的UserControl以反映该内容。

在MainView中:

<Window
   //usual window declarations>

   <Window.Resources>
      <DataTemplate DataType="{x:Type vm:FirstDetailViewModel}">
         <view:FirstDetailView />
      </DataTemplate>

      <DataTemplate DataType="{x:Type vm:SecondDetailViewModel}">
         <view:SecondDetailView />
      </DataTemplate>

      //more DataTemplates for other data entry views
   </Window.Resources>

   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="Auto" />
         <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>

      <view:ToolbarView Grid.Row="0"
                        DataContext="{Binding ToolbarContext}" />
      <ContentPresenter Grid.Row="1"
                        Content="{Binding DataEntryContext}" />
   </Grid>
</Window>    

在MainViewModel中:

private void ToolbarContext_LoadFirstDetailExecuted(object sender, EventArgs e)
{
   DataEntryContext = new FirstDetailViewModel();
}

private void ToolbarContext_LoadSecondDetailExecuted(object sender, EventArgs e)
{
   DataEntryContext = new SecondDetailViewModel();
}