XAML 如何在Xamarin.Forms Shell中为两个视图(页面)设置相同的视图模型示例作为绑定上下文?

b4wnujal  于 2022-12-07  发布在  Shell
关注(0)|答案(1)|浏览(162)

我有一个页面,它的绑定上下文被设置为SampleViewModel。在那里我有一个项目列表(实际上是一个ObservableCollection)。每个项目都有一个添加到购物车按钮。当点击添加到购物车按钮时,
1.我将该项作为CartItemsList添加到新ObservableCollection中
1.我更新了一个bool属性item.HasAddedToCart = true
1.我把CartItemsCount加1。
然后像这样向购物车添加几个项目后,我导航到购物车页面。在购物车页面中,我需要显示CartItemsListCartItemsCount
由于我的ViewModel(SampleViewModel)已经有了那些CartItemsListCartItemsCount,我想将Cart页面的绑定上下文设置为相同的视图模型示例。但是当我在XAML中设置绑定上下文时,它会创建该视图模型的新示例。
从购物车页面删除购物车项目应该是可能的。因此,如果我从购物车页面删除购物车项目,如果我返回到主页,该更改也应该在主页中可见。因此,在相同的视图模型中维护CartItemsList感觉是最好的方法。
但是如何将同一个vm示例设置为这两个页面的绑定上下文呢?

csga3l58

csga3l581#

您可以为ViewModel创建一个静态类,以便可以调用同一个VM示例。
代码如下:

public static class VMInstance
{
    private static SampleViewModel _sampleViewModel = new SampleViewModel();
    public static SampleViewModel SingleVM
    {
        get
        {
            return _sampleViewModel;
        } 
    } 
}

然后是Pages.xaml.cs:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        BindingContext = VMInstance.SingleVM;
    }
}

public partial class CartPage : ContentPage
{
    public CartPage()
    {
        InitializeComponent();
        BindingContext = VMInstance.SingleVM;
    }
}

相关问题