我相信你有幾個選擇:
共享持久存儲
如果你使用像SQLite或Realm等。其中可用於讀取和修改同一商場的存儲/緩存解決方案購物車之間的數據。然後,您可以使用視圖生命週期事件(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購物車視圖模型。
查看[Messenger](https://mvvmcross.com/docs/messenger)插件作爲替代方案 –