在我的項目,我們已經創建了一個容器內和的MainPage每個視圖被加載在那裏。 這樣我們不需要在代碼隱藏中放置任何代碼。 當主頁面作爲App上的RootVisual啓動時,MainPage會以DataContext的形式接收我們創建shell的類。容器從這個類中接收一個DP,我們使用shell中的事件來加載視圖。
這裏是容器的代碼:
<ContentControl Name="region1ContentControl" Content="{Binding Path=MainContent}" Style="{StaticResource ContentControlStyle}" Grid.Row="1" Margin="0,30" />
的搜索Maincontent屬性:
public static readonly DependencyProperty MainContentProperty =
DependencyProperty.Register("MainContent", typeof(System.Windows.Controls.Control),
typeof(MainPagePresenter), null);
public System.Windows.Controls.Control MainContent
{
get { return (System.Windows.Controls.Control)GetValue(MainContentProperty); }
set { SetValue(MainContentProperty, value); }
}
殼+其中視圖被加載
var presenter = (Bxf.IPresenter)Bxf.Shell.Instance;
presenter.OnShowView += (view, region) =>
{
if (region.Equals("MainContent", StringComparison.InvariantCultureIgnoreCase))
MainContent = view.ViewInstance;
else if (region.Equals("DetailContent", StringComparison.InvariantCultureIgnoreCase))
DetailContent = view.ViewInstance;
else
throw new ArgumentException(string.Format(AppStrings.InvalidRegionName, region));
};
的MainPage代碼隱藏:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
}
你看到了嗎? 注意:我沒有使用Prism,也沒有使用MVVM光源。
嗨Vinicius,謝謝你的回覆。我有點困惑 - 你的MainPage有一個相應的ViewModel嗎?我也失去了如何控制導航。如果用戶在瀏覽器中點擊向前/向後,ViewModel中是否執行了任何操作? – rockshire
我們的導航每次僅限一個視圖。一旦你加載一個視圖,另一個視圖關閉。我們的MainPage有一個相應的ViewModel(我們已經創建了一個shell),它作爲MainPage的DataContext傳遞。在那裏你可以做任何你想做的事情。 – Vinicius