首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何停止重置属性

如何停止重置属性
EN

Stack Overflow用户
提问于 2019-04-23 08:30:55
回答 1查看 60关注 0票数 1

在我的BaseViewModel上,我有一个名为OrderService的静态类,它有一个orders集合,每个Order都有一个IFoodItems集合。当我调用AddOrder方法并传递顺序时,它会正确地保存它,并且IFoodItems上的属性值也是正确的。当我在不同的ViewModel上调用我的GetOrders方法时,IFoodItems上的Quantity属性被重置为零,我不希望这种情况发生。如何保值?

我已经尝试使列表成为静态列表,在添加之前捕获食品列表,并使用MessageCenter类发送它。

ViewModel:

代码语言:javascript
运行
复制
class TakeOrderViewModel : BaseViewModel
    {
        #region Properties
        private double _orderPrice;
        ObservableCollection<IFoodItems> _FoodList; 

        public ObservableCollection<IFoodItems> FoodList {
            get { return _FoodList; }
            set {
                SetProperty<ObservableCollection<IFoodItems>>(ref _FoodList, value);
            }
        }
        public ICommand SaveOrderCommand { get; private set;}
        public double OrderPrice 
        {
            get { return _orderPrice; }
            set {
                SetProperty<double>(ref _orderPrice, value);
            }
        }
        #endregion

        public TakeOrderViewModel()
        {
            FoodList = menuService.getMenu();
            OrderPrice = 0;
            SaveOrderCommand = new Command<string>(SaveOrder);
        }

        public void SaveOrder(string name)
        {
            Order CustomerOrder = new Order(name);            
            if(IsOrderEmpty())
            {
                App.Current.MainPage.DisplayAlert("Error", "The order has no quantity.", "OK");
            }
            else
            {
                foreach (IFoodItems item in FoodList)
                {
                    if(item.Quantity > 0)
                    {
                        CustomerOrder.AddItem(item);
                    }

                }
                CustomerOrder.SetPrice(OrderPrice);
                //MessagingCenter.Send<TakeOrderViewModel, Order>(this, "orderSender", CustomerOrder);
                OrderService.AddOrder(CustomerOrder);
                App.Current.MainPage.DisplayAlert("Message", "Order has been saved", "OK");
                //ClearOrder();
            }            
        }
        public bool IsOrderEmpty()
        {
            double temp = 0;
            foreach (IFoodItems item in FoodList)
            {
                temp += item.Quantity;
            }
            if (temp == 0)
                return true;
            else
                return false;

        }              
        public void ClearOrder()
        {
            foreach(IFoodItems item in FoodList)
            {
                item.Quantity = 0;
            }
            OrderPrice = 0;
        }
    }

OrderService:

代码语言:javascript
运行
复制
 public class OrderService
    {
        ObservableCollection<Order> OrderList;
        public OrderService()
        {
            OrderList = new ObservableCollection<Order>();
        }

        public void AddOrder(Order value)
        {
            //one of the ways i tried to preserve the values
            ObservableCollection<IFoodItems> foods = value.foodItems;
            OrderList.Add(new Order(foods,value));
            //OrderList.Add(value);
        }
        public ObservableCollection<Order> GetOrders()
        {
            return OrderList;
        }

Order类:

代码语言:javascript
运行
复制
 public class Order
    {
        public string Name { get; set; }
        public ObservableCollection<IFoodItems> foodItems;
        public double Price { get; set; }
        public string PriceString { get; set; }

        public Order(string name)
        {
            Name = name;
            foodItems = new ObservableCollection<IFoodItems>();
        }
        public Order(ObservableCollection<IFoodItems> order, Order val)
        {
            this.Name = val.Name;
            this.foodItems = order;
            this.Price = val.Price;
            this.PriceString = val.PriceString;
        }
        public void SetPrice(double value)
        {
            Price = value;
            PriceString = "Price: " + Price + " tickets";
        }
        public void AddItem(IFoodItems food)
        {
            foodItems.Add(food);
        }
    }

IFoodItem:

代码语言:javascript
运行
复制
public interface IFoodItems : INotifyPropertyChanged
    {
        int Quantity { get; set; }
        double Weight_lbs { get; }
        double TicketPrice { get; }
        string Name{ get; set; }

        double GetDollarsMade();
        double GetTicketPrice();
        double GetAmountUsed();
    }

BaseViewModel:

代码语言:javascript
运行
复制
public class BaseViewModel : INotifyPropertyChanged
    {
        protected MenuService menuService;
        protected static OrderService OrderService;

        public BaseViewModel()
        {
            menuService = new MenuService();
            OrderService = new OrderService();
        }
        #region INotifyPropertyChanged
        protected bool SetProperty<T>(ref T backingStore, T value,
            [CallerMemberName]string propertyName = "",
            Action onChanged = null)
        {
            if (EqualityComparer<T>.Default.Equals(backingStore, value))
                return false;

            backingStore = value;
            onChanged?.Invoke();
            OnPropertyChanged(propertyName);
            return true;
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            var changed = PropertyChanged;
            if (changed == null)
                return;

            changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }
EN

Stack Overflow用户

回答已采纳

发布于 2019-04-23 12:55:16

每次继承BaseViewModel并实例化一个子代时,都会调用基构造器并创建一个新的OrderService实例。

代码语言:javascript
运行
复制
protected static OrderService OrderService = new OrderService();

并将其从构造函数中移除。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55802723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档