【问题标题】:WPF Binding not Updating in DataGrid (with grouping)WPF 绑定未在 DataGrid 中更新(带分组)
【发布时间】:2017-09-06 11:24:28
【问题描述】:

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

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

我检查过的内容:

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

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

【问题讨论】:

  • 尝试将 CollectionViewSource 的 IsLiveGroupingRequested 属性设置为 true。
  • @mm8 你的意思是分组正确^^?

标签: c# wpf mvvm datagrid


【解决方案1】:

将CollectionViewSource 的IsLiveGroupingRequested 属性设置为true。

【讨论】:

    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多