猿问

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

所以当用户点击 + 和 - 图像按钮时,我得到了这个页面,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。


慕标5832272
浏览 212回答 2
2回答

蛊毒传说

我的建议是在 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() 中将其删除

SMILET

您可以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,并且您可以控制需要“通信”的一切
随时随地看视频慕课网APP
我要回答