0
バインディングの問題について多くの質問があります。しかし、私は解決策を見いだすことはできません - 私のコードで何が間違っているかの手がかりもありません。DataGridでWPFバインディングが更新されない(グループ化されています)
私は2つのコレクションがあります。
public ObservableCollection<TicketEntry> AllEntries {get; set;}
public ObservableCollection<TicketEntry> Entries {get; set;}
Entity
は、プロパティIsFavourite
があります
private bool _isFavourite = false;
public bool IsFavourite
{
get { return _isFavourite; }
set
{
_isFavourite = value;
OnPropertyChanged();
OnPropertyChanged("ImageSource");
}
string ImageSource
{
get
{
if (IsFavourite)
{
return "pack://application:,,,/Resources/star_true.png";
}
else
{
return "pack://application:,,,/Resources/star_false.png";
}
}
}
<CollectionViewSource x:Key="Collection"
Source="{Binding Entries,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay,
NotifyOnSourceUpdated=True}"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="IsFavourite" />
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.LiveGroupingProperties>
<s:String>IsFavourite</s:String>
</CollectionViewSource.LiveGroupingProperties>
</CollectionViewSource>
//Handler for Command ((un)set-favourite)
private void HandleInvertFavourite()
{
if (IsFavourite)
{
IsFavourite = false;
}
else
{
IsFavourite = true;
}
AllTicketsViewModel.Instance.InvokeFavouritesChanged(this);
}
internal void InvokeFavouritesChanged(TicketEntry ticketEntry)
{
if(ticketEntry.IsFavourite) // Add
{
if(CurrentWeekViewModel.Instance.Entries.Any(x => x.TicketId == ticketEntry.TicketId)) // already exists
{
TicketEntry existingentry = CurrentWeekViewModel.Instance.Entries.First(x => x.TicketId == ticketEntry.TicketId);
CurrentWeekViewModel.Instance.Entries.First(x => x.TicketId == ticketEntry.TicketId).IsFavourite = true;
}
else
{
CurrentWeekViewModel.Instance.Entries.Add(ticketEntry);
}
}
else // Remove
{
if(CurrentWeekViewModel.Instance.Entries.Any(x => x.TicketId == timeTicketEntry.TicketId))
{
TicketEntry existingentry = CurrentWeekViewModel.Instance.Entries.First(x => x.TicketId == ticketEntry.TicketId);
if (existingentry.TimeBookings.Any(x => x.Date > CurrentWeekViewModel.Instance.SelectedWeek.FirstDay &&
x.Date < CurrentWeekViewModel.Instance.SelectedWeek.LastDay &&
existingentry.IsFavourite))
//has time data for actual week => keep but set fav = false
{
existingentry.IsFavourite = false;
}
else // completely remove
{
CurrentWeekViewModel.Instance.Entries.Remove(existingentry);
}
}
}
}
また、CurrentWeek
-DataGirdのGrouping
はIsFavourite
にあります。既存のエントリがIsFavourite_Changed
に切り替わると予想されます。
物事は私がチェックしました:
- バインディングが
- INotifyPropertyChangedのは、新しいお気に入りの作品の追加正しく
- を実装されている正しい
なぜISN」(唯一の既存のものは問題があります)プロパティの変更時にグループ化が変更されますか?
CollectionViewSourceのIsLiveGroupingRequestedプロパティをtrueに設定してください。 – mm8
@ mm8あなたはグループ化を意味します^^? –