2011-03-03 211 views
4

我有一個5頁的WPF應用程序。在我的主窗口上,我有5個按鈕。我想要做的是點擊按鈕1在主窗口的框架中打開頁面1。我不想使用導航窗口。我應該使用某種綁定嗎?我想用xmal,代碼越少越好。在此先感謝我正處於學習階段!wpf按鈕點擊

回答

3

您可以設置您的按鈕'Click事件處理程序以撥打Frame.Navigate(Uri)及其各自的頁面。

在XAML:

<Frame Name="myFrame"/> 
<Button Name="buttonPage1" Click="OnClickPage1"> 
    Page1 
</Button> 

然後在後面的代碼:

void OnClickPage1(object sender, RoutedEventArgs e) 
{ 
    myFrame.Navigate(new Uri("page1")); 
} 
1

我假設的邏輯後續從您的意見是,按下按鈕,將打開第2頁2等

我的建議,這適用於所有的WPF開發,是採用MVVM。它會給你更多的靈活性和可測試性。

爲了實現您的問題MVVM:

爲每種視圖創建的ViewModels,一個是你的主窗口

每個視圖模型成爲在DataContext其各自的視圖。

在MainWindowViewModel實現5 ICommand屬性並將按鈕上的Command屬性綁定到MainWindowViewModel上的每個相應的ICommand屬性。

在主窗口上,我不確定您是否實現了Frame控件,但我建議使用ContentControl,將控件上的Content屬性綁定到MainWindowViewModel上Object類型的某些屬性。

在執行每個ICommand對象時,您需要將MainWindowViewModel上的content屬性設置爲該按鈕的匹配ViewModel。

在MainWindowView.xaml你需要實現一系列的視圖模型映射到視圖的DataTemplates的:

<DataTemplate DataType="{x:Type Page1ViewModel}"> 
    <AdornerDecorator> 
     <views:Page1View DataContext="{Binding}"/> 
    </AdornerDecorator> 
</DataTemplate> 

我建議你看一下使用現有的許多MVVM框架之一。

MVVMFoundation - 重量輕,最低限度執行

MVVMLight - 較重的框架

Caliburn - 似乎有很多的附加功能

實現一個完整的框架看起來像一個很多額外的工作但從長遠來看,這將是值得的,更可測試,更易於維護。

+1

謝謝您的詳細解答。我將不得不研究MVVM模式以更好地理解您的想法。 – Betsy 2011-03-08 12:23:35