WPF绑定不在DataGrid中更新(带分组)

时间:2017-09-06 11:24:29

标签: c# wpf mvvm datagrid

我知道有很多关于绑定问题的问题。但是我没有找到任何解决方案 - 我也没有任何线索在我的代码中有什么问题。

我有两个收藏:

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正确实施
  • 添加新收藏夹(只有现有的收藏夹有问题)

为什么在属性更改时分组不会发生变化?

1 个答案:

答案 0 :(得分:1)

IsLiveGroupingRequested的{​​{1}}属性设置为CollectionViewSource