2017-09-06 16 views
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のGroupingIsFavouriteにあります。既存のエントリがIsFavourite_Changedに切り替わると予想されます。

物事は私がチェックしました:

  • バインディングが
  • INotifyPropertyChangedのは、新しいお気に入りの作品の追加正しく
  • を実装されている正しい

なぜISN」(唯一の既存のものは問題があります)プロパティの変更時にグループ化が変更されますか?

+0

CollectionViewSourceのIsLiveGroupingRequestedプロパティをtrueに設定してください。 – mm8

+0

@ mm8あなたはグループ化を意味します^^? –

答えて

1

CollectionViewSourceIsLiveGroupingRequestedプロパティをtrueに設定します。

関連する問題