2012-01-24 70 views
4

我是WPF和MVVM的新手。我在我的WPF應用程序中的mainWindowView中有Frame。我已經幀的源結合視圖模型的SourcePage屬性:通過WPF視圖模型更改源代碼導航框架

<Frame Name="frame" Content="Frame" Source="{Binding Path=SourcePage, Source={StaticResource WindowViewModel}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

鑑於模型,

public string SourcePage 
{ 
    get 
    { 
    return _sourcePage; 
    } 
    set 
    { 
    if (value != null) 
    { 
     _sourcePage = value; 
     OnPropertyChanged("SourcePage"); 
    } 
    } 
} 

最初我已經通過在視圖模型的構造設定sourcepage值加載selectTest視圖在該幀中:

public MainWindowViewModel() 
{ 
    SourcePage ="Std.User/SelectTest.xaml"; 
} 

現在單擊按鈕,我需要執行一些數據庫操作,之後我想在該框架中加載另一個視圖。

嗨科林,感謝您的立即回覆。但我已經嘗試過,並沒有像預期的那樣工作。這裏是我的代碼

public ICommand StartTestCommand 
{ 
    get 
    { 
    if (_startTest == null) 
    { 
    _startTest = new DelegateCommand(StartTest); 
    } 
    return _startTest; 
    } 
} 
private void StartTest() 
{ 
    MainWindowViewModel mwvm = new MainWindowViewModel(); 
    mwvm.SourcePage = "std.user/ChangePassword2.xaml"; 
} 

回答

0

要做到這一點:

  1. 從您的視圖模型作爲屬性暴露的命令(ICommand)。這可以綁定到一個Button,點擊後將執行您的命令。有關示例,請參閱MSDN上的Commanding Overview
  2. 執行命令時,在視圖模型中執行所需的數據庫邏輯
  3. 完成後,將SourcePage屬性更改爲下一頁。該視圖將自動更新。

您可能還想爲您的視圖模型添加一個IsBusy布爾值屬性,這在您的數據庫活動正在處理時爲true。你可以使用這個來禁止你通過綁定來查看。