为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Caliburn.Micro MVVM 从 WPF 中同一视图上的另一个视图模型更新列表

如何使用 Caliburn.Micro MVVM 从 WPF 中同一视图上的另一个视图模型更新列表

C#
萧十郎 2023-09-16 15:15:29
我是 WPF 新手,我想使用 Caliburn Micro 遵循 MVVM 框架。我无法从另一个视图模型中更新视图模型中的列表。我有3个观点:POSView :包含另外 2 个视图的两个内容控件产品视图:所有产品的列表CartView :购物车中添加的所有产品的列表单击产品视图中的产品后,产品应添加到购物车视图中POSViewModel.cspublic class POSViewModel : Conductor<object>.Collection.AllActive    {        #region Private Variables        private ProductsViewModel _ProductsViewModel;        private CartViewModel _CartViewModel;        #endregion        #region Public Variables        public ProductsViewModel ProductsViewModel        {            get { return _ProductsViewModel; }            set { _ProductsViewModel = value; }        }        public CartViewModel CartViewModel        {            get { return _CartViewModel; }            set { _CartViewModel = value; }        }        #endregion        #region Public Methods        public POSViewModel()        {            ProductsViewModel = new ProductsViewModel();            CartViewModel = new CartViewModel();        }        #endregion    }ProductsViewModel.cs:在 AddProdClick(ProductModel ProductModel) 上,我想将单击的产品添加到 CartView。public class ProductsViewModel : Conductor<object>    {        public BindableCollection<ProductModel> Products { get; set; }        public ProductsViewModel()        {            Products = new BindableCollection<ProductModel>();            for (int i = 0; i < 25; i++)            {                Products.Add(new ProductModel                {                    ProductName = "Product" + i.ToString(),                    Qty = i + 2,                    Rate = i * 10                }); ;            }        }        public void AddProdClick(ProductModel productModel)        {        }    }我希望将商品添加到购物车。
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可以使用 CartViewModel 作为参数:


    public POSViewModel()

    {   

        CartViewModel = new CartViewModel();    

        ProductsViewModel = new ProductsViewModel(CartViewModel);

    }

并在 ProductsViewModel 的构造函数中使用它


public class ProductsViewModel : Conductor<object>

{

    public BindableCollection<ProductModel> Products { get; set; }

    public CartViewModel CVM { get; set; }

    public ProductsViewModel(CartViewModel CVM)

    {

                    this.CVM = CVM;

    }


    public void AddProdClick(ProductModel productModel)

    {

                    CVM.Add(productModel)

    }

}

您还有另一个解决方案:使用 PosViewModel:


 public POSViewModel()

{   

    CartViewModel = new CartViewModel();    

    ProductsViewModel = new ProductsViewModel(this);

}


public class ProductsViewModel : Conductor<object>

{

    public BindableCollection<ProductModel> Products { get; set; }

    public CartViewModel CVM { get; set; }

    public ProductsViewModel(POSViewModel PVM)

    {

                    this.CVM = PVM.CartViewModel;

    }


    public void AddProdClick(ProductModel productModel)

    {

                    CVM.Add(productModel)

    }

}

第三种解决方案是使用EventAggregator,您需要修改一些编码


请参阅事件聚合器


单击时,您在 Add 方法中执行 EventAggregator.publish(new Addevent)


在 PosviewModel 中你可以捕捉到事件......


但为此你必须修改一些代码行,但阅读链接并不复杂


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 53 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信