私のセットアップの簡単な説明:
免責事項: コードは、私がやりたいことを示すためだけのものです。たとえば、コマンド バインディングは、イベント トリガーなどで行われます。これはビルドすらできないと確信していますが、スペースを無駄にしたくありませんでした。
私の見解:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding IsFavorite, Converter={StaticResource FavoriteConverter}" Tap="{Binding FavoriteCommand, CommandParameter={Binding}}"/>
<TextBlock Text="{Binding Title}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
私のビューモデル:
public class ViewModel : ViewModelBase
{
public IList<Item> Items { get; set; }
public RelayCommand<Item> Favorite
{
get
{
return new RelayCommand<Item>(item =>
{
item.IsFavorite = !item.IsFavorite;
RaisePropertyChanged(string.Empty);
};
}
}
}
私のモデル:
public class Item
{
public string Title { get; set; }
public bool IsFavorite { get; set; }
}
*私の質問: *
INotifyPropertyChanged を実装せずに IsFavorite-Property を更新するにはどうすればよいですか? これはモデル クラスであり、1 つのプロパティを更新するためだけに ViewModel を作成するのは好きではありません。空の文字列で PropertyChanged を呼び出すとすべてが更新されると思いましたが、残念ながらそうではありませんでした。
*私の解決策: *
public class ItemViewModel : ViewModelBase
{
public Item Model { get; private set; }
public bool IsFavorite
{
get { return Model.IsFavorite; }
set
{
Model.IsFavorite = value;
RaisePropertyChanged("IsFavorite");
}
}
}