簡體   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