2017-02-24 56 views
0

RaisePropertyChange我有一個我的購物的ListView項目勢必ShopingCartViewModel。當我點擊項目它帶我到ItemInfoFragment這是勢必ItemInfoViewModelMvvmCross;如何從另一個視圖模型

ItemInfoFragment我有一個按鈕其中刪除的購物列表視圖移除它。

我的問題是;之後,我刪除項目後退按鈕回到我以前活動,則我的購物的ListView仍然顯示項目刪除

我的問題是;當我退出ItemInfoFragment時如何在ShoppingCartViewModel中RaisePropertyChange?

+0

查看[Messenger](https://mvvmcross.com/docs/messenger)插件作爲替代方案 –

回答

1

我相信你有幾個選擇:

共享持久存儲

如果你使用像SQLiteRealm等。其中可用於讀取和修改同一商場的存儲/緩存解決方案購物車之間的數據。然後,您可以使用視圖生命週期事件(OnResume [Android]或ViewWillAppear [iOS])從緩存中檢索最新版本。

或者,如果購物車的數據量很小,您可以讀/寫它到MvvmCross Settings Plugin。你只需要序列化和反序列化對象,你只能保存基本類型,如字符串,布爾變量,詮釋等

依賴注入共享實例

您可以在內存中緩存創建一個通過使用共享類實例可以在多個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>(); 
    } 
} 

用法示例共享的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)); 
    } 
} 

的Pub/Sub

您可以發送messages回用MvvmCross Messenger Plugin購物車視圖模型。

相關問題