2012-01-24 5 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"); 
    } 
    } 
} 

を当初、私はviewmodelのコンストラクタでsourcepage値を設定することで、そのフレームにselectTestビューをロードしています

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

ボタンのクリックで、DB操作を実行する必要があり、その後、そのフレームに別のビューをロードしたいとします。

こんにちはコリン、すぐにお返事ありがとうございます。しかし、私は同じことを試して、それが期待どおりに動作していません。ここに私のコードは、これを実現するために

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になります。これを使用して、バインディング経由で表示を無効にすることができます。

関連する問題