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

如何向上发送数据?从数据模板到上面

如何向上发送数据?从数据模板到上面

C#
慕标5832272 2021-11-07 20:10:52
所以当用户点击 + 和 - 图像按钮时,我得到了这个页面,TotalPrice 标签绑定被更新,没问题。这是在项目模板绑定中。但是,每当产品增加或减少时,我都需要更新 TotalOrderValue。但是当列表视图中的某些内容更新时,我无法触发 UpdateTotalOrderValue。我该怎么做呢?我尝试了事件,但无法让它们工作,因为它无法向上沟通。这是来自 PAGE 视图模型public decimal? TotalOrderValue{    get { return totalOrderValue; }    set    {        totalOrderValue = value;        OnPropertyChanged();    }}private void UpdateTotalOrderValue(){    foreach (var product in Items)    {        TotalOrderValue += product.Price;    }}这是列表视图绑定到的 ProductModel/DataTemplate 您可以在此处查看我对我想做的事情的评论。public int ModelUpdateCount{    get { return modelUpdateCount; }    set    {        if (value >= 0)        {            modelUpdateCount = value;            TotalPrice = modelUpdateCount * Price;            //ProductsPageViewModel.UpdateTotalOrderValu();            NotifyPropertyChanged();        }    }}public decimal? TotalPrice{    get { return totalPrice; }    set    {        totalPrice = value;        NotifyPropertyChanged();    }}如果需要,用于视觉效果的图像:https://gyazo.com/80f64e4146b6a661f983938d1fb5d1bf它是需要更新为列表视图中所有产品总数的 0。
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我的建议是在 PageViewModel 的 ProductModel 中为 PropertyChanged 事件添加一个侦听器:


public void AttachListener()

{

   foreach (var product in Items)

   {

      production.PropertyChanged += OnOrderCountUpdate;

   }

}


private void OnOrderCountUpdate(object sender, PropertyChangedEventArgs e)

{

   if(e.PropertyName == "ModelUpdateCount")

       UpdateTotalOrderValue();

}

您应该在页面的 OnAppearing() 中附加侦听器,并在 OnDisappearing() 中将其删除


查看完整回答
反对 回复 2021-11-07
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以DataSource像这样创建一个新类:


public class PageVMDataSource

{

    #region Attributes


    private readonly PageVM pageVM;

    private readonly ProductModel productModel;


    #endregion


    #region Public Methods



    public PageVMDataSource(PageVM pageVM, ProductModel productModel)

    {

        this.pageVM = pageVM;

        this.productModel= productModel;

    }



    public void Initialize()

    {

        this.productModel.PropertyChanged += this.OnProductModelPropertyChanged;

    }


    #endregion


    #region Event Handlers


    private void OnProductModelPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)

    {

        switch (propertyChangedEventArgs.PropertyName)

        {

            case "ModelUpdateCount":

                this.pageVM.UpdateTotalOrderValue;

                break;

        }

    }


    #endregion

}

创建 VM 和模型时,创建一个新实例,DataSource以便它订阅模型更改并执行 VM 方法。


通过这样做,您正在应用 SOLID,并且您可以控制需要“通信”的一切


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 211 浏览

添加回答

举报

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