ピッカーから値を取得し、ObservableCollection の材料の量をユーザーが選択した人数に変更するレシピ アプリケーション用の材料計算機を作成しています。デバッグにより、コード ビハインドが正常に動作することが示されましたが、監視可能なコレクションは新しい値で UI を更新しません。助けてください。
namespace SQLiteListView.Models
{
public class Ingredients : INotifyPropertyChanged
{
// primary key
[PrimaryKey, AutoIncrement]
public int IngredientsId { get; set; }
// other attributes
private string _ingredientsName { get; set; }
private double _ammount { get; set; }
private string _units { get; set; }
public string IngredientsName
{
get { return _ingredientsName; }
set
{
_ingredientsName = value;
OnPropertyChange("IngredientsName");
}
}
public double Ammount
{
get { return _ammount; }
set
{
_ammount = value;
OnPropertyChange("ammount");
}
}
public string Units
{
get { return _units; }
set
{
_units = value;
OnPropertyChange("Units");
}
}
public int RecipeID
{
get { return _recipeID; }
set
{
_recipeID = value;
OnPropertyChange("RecipeID");
}
}
// specify the foreign key
[ForeignKey(typeof(Recipe))]
public int _recipeID { get; set; }
// many to one relationship with recipe
[ManyToOne]
public Recipe Recipe { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChange(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
ビューモデル
private PickerNo _selectedPicker { get; set; }
public PickerNo SelectedPicker
{
get { return _selectedPicker; }
set
{
_selectedPicker = value;
IngredientsCalculator();
}
}
void IngredientsCalculator()
{
var ingredients = new ObservableCollection<Ingredients>();
foreach (Ingredients i in IngredientsList)
{
i.Ammount = (i.Ammount / Recipe.Serves) * SelectedPicker.NumberOfPeople;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}