我有一个使用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容器中。我正在处理用户控件工具栏中的用户控件工具栏中的事件,如上所示。我想要的是在单击工具栏时替换详细信息窗格。但我不知道该怎么做?
答案 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();
}