我有一個棱鏡應用程序,包含一個Shell.xaml(與MainRegion),ShellViewModel.cs。在棱鏡v4 WPF應用程序(區域)打開第二殼
該應用程序啓動時會打開此Shell窗口。現在我想打開另一個包含相同shell窗口(Shell.xaml,ShellViewModel)的彈出窗口。
殼的定義就像在棱鏡StockTraderRI示例中。 Shell.xaml包含MainRegion(非常簡化的源):
<Window x:Class="Bsoft.Test.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.codeplex.com/CompositeWPF"
Title="MainWindow" Height="550" Width="825">
<Grid>
<ContentControl cal:RegionManager.RegionName="MainRegion"/>
</Grid>
</Window>
代碼後面只包含基本視圖模型參考:
namespace Bsoft.Test.bmedApp
{
[Export]
public partial class Shell : Window
{
[ImportingConstructor]
public Shell()
{
InitializeComponent();
}
[Import]
ShellViewModel ViewModel
{
set
{
this.DataContext = value;
}
}
}
}
的ShellViewModel自動由MEF裝載機插入:
namespace Bsoft.Test.bmedApp
{
[Export]
public class ShellViewModel : NotificationObject
{
[ImportingConstructor]
public ShellViewModel()
{
}
}
}
這確實像預期的那樣工作。
現在我想再次打開shell窗口作爲彈出窗口。這是很容易,以紀念殼牌和視圖模型爲未使用共享:
[PartCreationPolicy(CreationPolicy.NonShared)]
但我的問題是:
1)我加載其他視圖(型號)到MainRegion。我該如何告訴程序View(Model)應該加載到主Shell MainRegion還是加載到彈出窗口MainRegion中?我想我需要scoped RegionManagers,但我不知道如何使用它們。
2)我已經有一些事件(EventAggregator)加載到一個區域來傳遞通知和命令(狀態更新,視圖關閉,錯誤)以供Shell報告。我怎樣才能從彈出的窗口事件中分離出主要的shell事件(因爲兩者都是相同的shell)?
我想打開幾個彈出窗口,所以使用不同的區域名稱對我來說是不夠的,我需要更多的分離。也許有辦法創建一個單獨的內部棱鏡/ mef/region /容器框架?
我只想知道爲什麼再次打開一個shell?如果shell是一個需要重用的視圖,爲什麼不把它們概括出來,在它上面創建兩個包裝。一個是外殼,另一個是可以再次打開多次的視圖。 – decyclone 2010-12-23 10:56:29
shell是我的包裝器,包含一個帶有許多項目的TabControl。我只想讓用戶能夠爲相同類型的視圖打開第二個包裝,以便他可以並排查看它們。 – Sam 2010-12-23 10:59:35
無論如何,我不知道如何實現您的建議:如何爲兩個或多個視圖中的每一個分隔區域和事件。 – Sam 2010-12-23 11:23:51