MVVM-Pattern を使用した WPF のプロジェクトがあります。
ビューには、個人 (名、姓、町) のリストビューがあり、リストの横には、ボタン (保存) が付いた個人の詳細 (名、姓、郵便番号) があります。左側の人物をクリックすると、右側の人物の詳細が自動的に読み込まれます。
ViewModel には、Person-Model の ObservableCollection があります。(人物一覧)
Person モデルには、FirstName、LastName、Town、Zip などのプロパティが含まれています。(詳細)。
ZIP を変更すると、タウンは自動的に更新されます (セッター スイッチの場合) 例: ZIP '11111' タウン 'Town1' / ZIP '22222' タウン 'Town2'。
Person モデルには、変更を保存するための ICommand "SavePerson" も含まれています。
リストビューのアイテムをクリックすると、詳細が自動的に読み込まれます。FirstName または LastName を変更して [保存] をクリックすると、リストビューで選択したアイテムの FirstName と LastName が変更されますが、問題ありません。ここで、ZIP を '12345' から '11111' に変更すると、リストビューの町はまだ古い町であり、'Town1' ではありません。
モデルに INotifyPropertyChanged-Interface を実装せずに、この問題を解決するアイデアはありますか?
いくつかのコード: モデル:
public class Person
{
private string _firstName = string.Empty;
private string _lastName = string.Empty;
private string _zip = string.Empty;
private string _town = string.Empty;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
public string LastName
{
get { return _lastName; }
set { _lastName= value; }
}
public string ZIP
{
get { return _zip; }
set
{
switch (value)
{
case "11111":
this.Town = "Town1";
break;
case "22222":
this.Ort = "Town2";
break;
default:
break;
}
_zip = value;
}
}
public string Town
{
get { return _town; }
set { _town= value; }
}
public ICommand SaveNameCommand
{
get
{
return new DelegateCommand((param) => this.SaveName(param));
}
}
private void SaveName(object parameter)
{
string[] param = ((string)parameter).Split(new char[] { ':' });
FirstName = param[0];
LastName = param[1];
PLZ = param[2];
}
}
ビューモデル:
public class PersonList
{
private readonly ObservableCollection<Person> _persons = new ObservableCollection<Person>();
private Person _currentSelectedPerson = new Person();
public PersonList()
{
this._persons.Add(new Person() { FirstName = "First1", LastName = "Last1", Ort = "Ort1", PLZ = "112" });
this._persons.Add(new Person() { FirstName = "First2", LastName = "Last2", Ort = "Ort2", PLZ = "122" });
this._persons.Add(new Person() { FirstName = "First3", LastName = "Last3", Ort = "Ort3", PLZ = "1132" });
}
public IEnumerable<Person> Persons
{
get { return this._persons; }
}
}