2016-06-20 7 views
3

私はfreshmvvmフレームワークでxamarinフォームを使用しています。freshmvvm PageModelからページコードの後ろに

xamlをスキップして、C#のコードのバインディングデータにアクセスする方法を知りたいと思います。

コードサンプルは役に立ちますか?

答えて

4

これはMVVMの原則に反しますが、もちろんこれを行う方法はあります。

MVVMフレームワークがなければ、手動でViewModelを作成し、BindingContextdocumentation)を自分で設定します。あなたにとってMVVMフレームワークが行う「唯一の」こと(この点に関して)は自動的にバインドされるように設定されているため、同じコードを何度も繰り返し書き込むことに悩まされることはありません。だから、

、あなたがこのViewModelに、ノートIユーザーPageModelがFreshMvvm命名一致する必要が想像:私のページに今

// SamplePageModel.cs 
public class SamplePageModel 
{ 
    public string Foo { get; set; } = "Bar"; 
} 

を、私はこのようにBindingContextを設定します。

// SamplePage.cs 
// ... Skipped code, just constructor here: 
public SamplePage() 
{ 
    InitializeComponent(); 

    BindingContext = new SamplePageModel(); 
} 

SamplePageModelの任意の特性に結合することができる。

FreshMvvmはこの部分を自動的に行います。 何らかの理由でViewModel/PageModelに直接アクセスしたい場合は、逆の操作を行います。どこかのページやあなたが行うことができ、コードビハインドで:pageModelnullない場合

// ... Some code here 
var pageModel = BindingContext as SamplePageModel; 
// ... More code here 

は、今すぐあなたのデータバインドを持っているとPageModelをいっぱい!

+2

返信ありがとう、それは本当にfreshmvvmを理解するのに役立ちました:) –

+0

恐ろしい。シンプルできれいな答え。 :) –

2

私はジェラルドの答えが役に立ったと評価していますが、私はあなたがコンストラクタでようをやって対あなたのページにこのイベントをオーバーライドする必要があることが見つかりました:

protected override void OnBindingContextChanged() 
{ 
    base.OnBindingContextChanged(); 

    var pageModel = BindingContext as YourFreshMVVMPageModel; 

    // Modify the page based on the pageModel 
} 

PageModel工事がページの後に場所を取るように見えますコンストラクターですが、このイベントは適切なタイミングで発生しているように見えますが、依然としてページが自分の望むように動作するように見えます。

関連する問題