2017-02-24 11 views
0

からRaisePropertyChangeします。私は項目にをクリックすると、それは、ItemInfoViewModelを拘束されItemInfoFragmentに私を取ります。 MvvmCross;どのように<strong>バインド</strong>に<strong>ShopingCartViewModel</strong>ある<strong>アイテム</strong>と私は<strong>のShoppingCart LISTVIEW</strong>を持っている別のViewModelに

ItemInfoFragment私は項目をするShoppingCartリストビューからそれを削除削除ボタンを有します。

私の問題はです。私は削除項目押し戻るボタン以前活動に戻り、ShoppingCartのListViewの私はを削除まだショー項目

私の質問は、 ItemInfoFragmentを終了するときにShoppingCartViewModelでRaisePropertyChangeを実行する方法は?

+0

代わりに[Messenger](https://mvvmcross.com/docs/messenger)プラグインを見てください –

答えて

1

は、私はあなたがいくつかのオプションを持っていると信じて:

共有永続ストレージ

あなたが読んで、同じショッピングを修正するために使用することができるなどSQLiteRealmなどのストレージ/キャッシング・ソリューションを使用している場合ページ間のカートデータ。その後、ビューのライフサイクルイベント(OnResume [Android]またはViewWillAppear [iOS])を使用して、キャッシュから最新のものを取得できます。

ショッピングカートのデータサイズが小さい場合は、MvvmCross Settings Pluginに読み書きすることができます。あなただけが唯一のint型、文字列、boolsなどの基本的なタイプを保存することができますようにオブジェクトをシリアライズとデシリアライズする必要がなど

依存性注入共有インスタンス

あなたは共有を使用して経由してメモリキャッシュに作成することができます複数のViewModel間で共有することができます。このクラスのプロパティは、さまざまなビューに直接バインドできます。リストを変更すると、リストにバインドされているすべてのビューが更新されます。注意すべき点は、このインスタンスクラスが占有するメモリ領域が必要な場合は、手動でクリーンアップを処理する必要があることです。

例:

例モデル

public class ItemInfo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public double Price { get; set; } 
} 

共有クラス・インスタンスおよびインターフェイス

public interface ISharedShoppingCart 
{ 
    MvxObservableCollection<ItemInfo> ShoppingCartItems { get; set; } 
} 

public class SharedShoppingCart : MvxNotifyPropertyChanged, ISharedShoppingCart 
{ 
    MvxObservableCollection<ItemInfo> _shoppingCartItems; 
    public MvxObservableCollection<ItemInfo> ShoppingCartItems 
    { 
     get { return _shoppingCartItems; } 
     set { SetProperty(ref _shoppingCartItems, value); } 
    } 
} 

public class App : MvxApplication 
{ 
    public override void Initialize() 
    { 
     /* Other registerations*/ 

     Mvx.LazyConstructAndRegisterSingleton<ISharedShoppingCart, SharedShoppingCart>(); 
    } 
} 
012クラスとインターフェイスを登録することを確認します

共有のviewmodelsでの使用例

public class ShopingCartViewModel : MvxViewModel 
{ 
    readonly ISharedShoppingCart _sharedShoppingChart; 

    public ShopingCartViewModel(ISharedShoppingCart sharedShoppingChart) 
    { 
     _sharedShoppingChart = sharedShoppingChart; 
    } 

    public MvxObservableCollection<ItemInfo> ShoppingCartItems 
    { 
     get { return _sharedShoppingChart.ShoppingCartItems; } 
     set { _sharedShoppingChart.ShoppingCartItems = value; } 
    } 
} 

public class ItemInfoViewModel : MvxViewModel 
{ 
    readonly ISharedShoppingCart _sharedShoppingCart; 

    public ItemInfoViewModel(ISharedShoppingCart sharedShoppingCart) 
    { 
     _sharedShoppingCart = sharedShoppingCart; 
    } 

    void RemoveItemFromCart(int id) 
    { 
     _sharedShoppingCart.ShoppingCartItems 
      .Remove(_sharedShoppingCart.ShoppingCartItems.Single(x => x.Id == id)); 
    } 
} 

パブ/サブ

あなたはMvvmCross Messenger Pluginを使用して、ショッピングカートのViewModelに戻っmessagesを送信することができます。

関連する問題

 関連する問題