В течение последних трех дней я столкнулся с довольно сложной проблемой. Я пытаюсь сделать заказ с приложением, чтобы сделать это, я хотел иметь ObservableCollection, содержащий элементы MainCategory. Теперь элементы MainCategory содержали CategoryName и еще один ObservableCollection из блюд. У блюд есть те реквизиты: имя, цена и количество. Я сделал все это, и привязки, и все работает отлично.ObservableCollection внутри ObservableCollection doen't fire Collection измененное событие
Проблема находится в нижней части страницы (вне ListView, которая вложена внутри Listview). Я хочу иметь TextBlock с TotalValue, который должен меняться каждый раз. Количество блюда изменяется. Я использую MVVM, и я сделал все INotifyPropertyChanged для реквизита и CollectionChanged, но это работает только когда я добавляю или удаляю что-то. Не когда я изменяю значение опора во втором ObservableCollection.
Вот код:
public class MenuCollection : ObservableCollection<MainCategories>,
INotifyCollectionChanged, INotifyPropertyChanged
{
public MenuCollection()
{
Add(new MainCategories("Category1", false));
this[0].SubMenuItems.Add(new Dishes("Dish1", 4));
}
}
public class MainCategories : MainViewModelBase
{
public ObservableCollection<Dishes> SubMenuItems{get; set;}
public MainCategories(string name, bool visible)
{
this.categoryName = name;
this.visible = visible;
SubMenuItems = new ObservableCollection<Dishes>();
}
public string categoryName;
public string CategoryName
{
get { return categoryName; }
set
{
if (categoryName != value)
{
categoryName = value;
OnPropertyChanged("CategoryName");
}
}
}
public bool visible;
public bool Visible
{
get { return visible; }
set
{
if (visible != value)
{
visible = value;
OnPropertyChanged("Visible");
}
}
}
}
public class Dishes : MainViewModelBase
{
public Dishes(string dishName, int price)
{
this.dishName = dishName;
this.dishPrice = price;
this.quantity = 0;
}
private string dishName;
public string DishName
{
get { return dishName; }
set
{
if (dishName != value)
{
dishName = value;
OnPropertyChanged("DishName");
}
}
}
private int dishPrice;
public int DishPrice
{
get { return dishPrice; }
set
{
if (dishPrice != value)
{
dishPrice = value;
OnPropertyChanged("DishPrice");
}
}
}
private int quantity;
public int Quantity
{
get { return quantity; }
set
{
if (quantity != value)
{
quantity = value;
OnPropertyChanged("Quantity");
}
}
}
}
Я просто хочу, чтобы найти способ, чтобы сохранить мое полное обновление значения при каких-либо изменениях внутри главной наблюдаемой коллекции, как количество продукта. есть ли способ запустить событие CollectionChanged?
и более ранняя версия без кнопок
* «когда-либо изменения внутри главной наблюдаемой коллекции, как и количество продукта. Есть в любом случае, чтобы запустить событие CollectionChanged» * То есть ничего не нужно делать с 'CollectionChanged'. Это 'INotifyPropertyChanged'. У вас есть уродливая проблема. 'MainCategories' должен обрабатывать' PropertyChanged' на всех '' Dishes'' в своей коллекции. Когда свойство, подлежащее суммированию, изменяется, 'MainCategories' пересчитывает сумму и присваивает это свойство, возможно,' MainCategories.Sum'. 'MenuCollection' делает то же самое с свойствами' Sum' своих элементов. XAML привязывается к MainCollection.Sum –