MVVMを初めて使用しようとしています。私はモデルクラス、ビューモデルクラス、ビューxamlページを持つWindows Phoneアプリ(マンゴー)を持っています。 VMにバインドされたコントロール(テキストボックス)があり、VMがモデルにバインドされています。MVVMがViewModelに通知していないINotifyPropertyChangedモデルの使用
モデルとビューモデルの両方がINotifyPropertyChanged
を実装しています。私が使用している実装はコピーされているので、INPCで何をやっているのか分かりません。ここで両方のクラスに記載されているコードは:
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Iのいずれか(テキストボックスからの)手動で設定するか、または(他の特性のいずれかを変更することによって)計算することができるモデルクラスの1つの特性を有しています。その結果を1つ呼んでみましょう。
PropertyChanged
がnull
であるにもかかわらず、変更されたプロパティと再計算されたプロパティの両方でINPCが呼び出され、コードの一部がスキップされます。その後、VMでは、変更されたプロパティがそのクラスのINPC(設定されたアクセサの一部として)をステップスルーし、今回はPropertyChanged
がnull
ではないため、PropertyChanged
メソッドが呼び出されます。ただし、Result
プロパティの場合、INPCは呼び出されません(そのプロパティには、他のプロパティのsetアクセサでINPCが呼び出されません)。ここ
は、算出されたプロパティされていない、モデルにおける特性の一つである:ここ
public int AgeSetting
{
get
{
return (int)GetValueOrDefault(AgeSettingKeyName, AgeSettingDefault);
}
set
{
AddOrUpdateValue(AgeSettingKeyName, value);
Calculate();
}
}
はモデルで計算した値の特性です。ここのViewModelから
public int PointsSetting
{
get
{
return (int)GetValueOrDefault(PointsSettingKeyName, PointsSettingDefault);
}
set
{
AddOrUpdateValue(PointsSettingKeyName, value);
}
}
は、両方のプロパティは次のとおりです。
public int Age
{
get
{
return person.AgeSetting;
}
set
{
person.AgeSetting = value;
NotifyPropertyChanged("Age");
}
}
public int PointsAllowed
{
get
{
return person.PointsSetting;
}
set
{
person.PointsSetting = value;
NotifyPropertyChanged("PointsAllowed");
}
}
は、私がモデルクラスから、VMのクラスに、UIへのINPCべきバブルアップを期待していた、この前にやったことがないました。それはそのように働いているようには見えません。
Result(calculated)プロパティが変更されていることがわかりました。ページから離れて戻ってきて、新しく表示された値が正しいためです。私はちょうど、モデルの計算値、ビューモデル、そしてビューまでの取得方法を知らない。
ありがとうございます。
便利なツールの1つがVSの出力ウィンドウです。これは、あなたのアプリケーションを起動してUIを初期化するときにバインディングが失敗したかどうかを示します。あなたの綴りが間違っているかもしれません。 –
私はそれを知らなかった。ありがとうございました。しかし、バインディングは、隔離された配列セットに格納されている値をテキストボックスにプルするので、機能しています –
私はあなたが本当に求めていることを理解する時間がありません。あなたのタイトル](http://stackoverflow.com/posts/7421606/edit)それはあなたが尋ねているものとの関係で実際の質問であるように?タグを有機的に使用するだけのボーナスポイント。ありがとう! – Will