我的设置的快速描述:
免责声明:代码仅用于显示我想要做的事情。例如,命令绑定是通过事件触发器等完成的。我很确定这甚至不会构建,但我不想浪费空间。
我的观点:
<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?它是一个模型类,我不想仅仅为了更新一个属性而创建一个 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");
}
}
}