私はかなり複雑な問題に直面しています。私はアプリケーションを取る注文をしようとしている、これを行うには、私はObservableCollection MainCategoryの項目を含むようにしたい。現在、MainCategory項目にはCategoryNameとObservableCollectionが含まれています。料理には名前、価格、数量といった小道具があります。私はこれをすべて行い、バインディングとすべてが完璧に機能します。ObservableCollection内のObservableCollectionは発生しません。コレクションの変更イベント
問題はページ下部(ListView内にネストされているListViewの外側)です。毎回変更する必要のあるTotalValueをTextBlockに追加したいと思います。私はMVVMを使用していて、私はすべてのINotifyPropertyChangedを小道具とCollectionChangedに行っていますが、これは何かを追加または削除するときにのみ機能します。 2番目の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'はコレクション内のすべての' Dishes'に対して 'PropertyChanged'を処理する必要があります。合計されるプロパティが変更されると、 'MainCategories'はその合計を再計算し、それをプロパティに代入します。おそらく' MainCategories.Sum'です。 'MenuCollection'はアイテムの' Sum'プロパティと同じことをします。 XAMLはMainCollection.Sumにバインドします。 –