繁体   English   中英

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

[英]WPF Binding not Updating in DataGrid (with grouping)

我知道有很多关于绑定问题的问题。 但我还没有找到任何解决方案——我也不知道我的代码有什么问题。

我有 2 Collections:

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 在IsFavourite上有Grouping - 我希望现有条目在IsFavourite_Changed上切换组。

我检查过的事情:

  • 绑定是正确的
  • INotifyPropertyChanged 正确实现
  • 添加新的收藏夹有效(只有现有的有问题)

为什么当属性改变时分组没有改变?

CollectionViewSourceIsLiveGroupingRequested属性设置为true

尝试刷新组

ICollectionView groupedList = CollectionViewSource.GetDefaultView(items);
groupedList.Refresh();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM