Prism Quickstart Templatesでこれを行う方法の完全な実例を見ることができます。
あなたがする必要があるいくつかの重要なものがあります。
お使いのモデルのプロパティに直接結合が(それは率直に言って、私は私のアプリを&デモのすべてで行う何かで)行うには素晴らしいことです。ただし、モデルのプロパティに直接バインドするということは、モデルが観測可能であることを保証する必要があることを意味します(INotifyPropertyChanged
を実装する)。
public class Person : BindableBase
{
private string _email;
public string Email
{
get => _email;
set => SetProperty(ref _email, value);
}
}
NOTE あなたはBindableBase、INotifyPropertyChanged
、あるいは単にへのインタフェースを追加することを実装する任意の基本クラスを使用する必要はありません(あなたはこれを簡素化することができ(クイックスタート・テンプレートのような)PropertyChanged.Fodyを使用した場合クラスは動作します):
public class Person : BindableBase
{
public string Email { get; set; }
}
次に、渡すパラメータを受け入れるようにViewModelをセットアップする必要があります。 Prism 6.3ではいくつかのオプションがあることに注意してください。
プリズム6で始まる。3の場合、INavigationAware
は2つの新しいナビゲーションインターフェイス、INavigatingAware
とINavigatedAware
の組み合わせになりました。名前のとおり、INavigatingAware
はナビゲーションが処理される直前(ナビゲーションスタックにビューがプッシュされる前)に処理され、INavigatedAware
は直前に発生したナビゲーションを処理します。その結果、INavigatingAware.OnNavigatingTo
を使用してモデルを更新すると、ビューがスタックにプッシュされたときに電子メールが表示されますが、INavigatedAware.OnNavigatedTo
を使用すると、目立つUIが更新される可能性があります。私ものViewModelのプロパティでModel
のキーを持つことをここで注意すべき
public class ViewAViewModel : BindableBase, INavigatingAware
{
// This assumes you are using PropertyChanged.Fody as mentioned above
public Person Model { get; set; }
public void OnNavigatingTo(NavigationParameters parameters)
{
// Method 1:
Model = parameters.GetValue<Person>("Model");
// Method 2:
if(parameters.TryGetValue<Person>("Model", out Model))
{
// do something
}
// Method 3:
Model = new Person
{
Email = parameters.GetValue<string>("email");
};
}
}
注 :あなたは次のようにあなたのモデルを設定することについては行くかもしれない、あなたの目的のために選択した二つの方法のどちら
Model
という名前は重要ではありません。それはfoobar
であり、まだ動作します。重要なことのようなキーマッチが、以下に示すことです:
_navigationService.NavigateAsync("ViewA", new NavigationParameters
{
{ "foo", new Person { Email = "[email protected]" } }
});
Model = parameters.GetValue<Person>("foo");
は、最後にあなたのビューのバインディングコンテキスト(あなたのViewModel)...あなたがオブジェクト型ではなく、プロパティ名にはないバインドされていることを確認する必要がありますプロパティ名Model
を使用してPersonモデルを参照するため、XAMLは次のようになります。
<Entry Text="{Binding Model.Email}" />
残念ながら、それは動作しません。あなたはXAMLについて正しいですが、質問をタイプしたときは間違いでした。 '_model'と' Model'の両方で試しましたが、どちらもうまくいきませんでした。私がそれを動作させるために見つけた唯一の方法は、割り当ての後に 'RaisePropertyChanged(" Model ");を呼び出すことですが、明示的にその呼び出しを行うべきではありません。あなたは何か考えていますか? – Dimitris
あなたの質問にいくつかの情報がありません。私は答えを更新しました。 – lowleetak
2番目のアプローチは私のために働いた(パブリックプロパティを新しいオブジェクトに設定する)私は最初のアプローチを試みなかった。どうもありがとう。 – Dimitris