CollectionViewSource: свойства LiveShaping не работают
Я использую CollectionViewSource со свойствами LiveShaping, особенно с активированной группировкой. Проблема в том, что изменение свойств группировки не работает сразу. Это работает, однако, когда я обновляю представление вручную, вызывая Refresh в представлении.
Но тогда возникает вопрос: почему у меня есть свойства LiveShaping для CollectionViewSource, если они не работают? Или я что-то не так делаю?
Вот пример:
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Data;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
ObservableCollection<Test> TestList = new ObservableCollection<Test>();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Test t = new Test()
{
Group = i.ToString(),
Name = (j + (i * 10)).ToString()
};
TestList.Add(t);
}
}
CollectionViewSource aViewSource = new CollectionViewSource();
aViewSource.Source = TestList;
aViewSource.IsLiveGroupingRequested = true;
aViewSource.GroupDescriptions.Add(new PropertyGroupDescription("Group"));
aViewSource.LiveGroupingProperties.Add("Group");
foreach (CollectionViewGroup o in aViewSource.View.Groups)
{
Console.WriteLine(o.Name);
foreach (Test o2 in o.Items)Console.WriteLine(" " + o2.Name);
}
Console.WriteLine("----------------------------------------------");
TestList[4].Group = "4";
//aViewSource.View.Refresh(); When using this line it works.
foreach (CollectionViewGroup o in aViewSource.View.Groups)
{
Console.WriteLine(o.Name);
foreach (Test o2 in o.Items) Console.WriteLine(" " + o2.Name);
}
Console.WriteLine("----------------------------------------------");
foreach (Test test in TestList)
{
Console.WriteLine("{0}: {1}", test.Group, test.Name);
}
Console.WriteLine("----------------------------------------------");
Console.ReadKey();
}
}
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string myName;
private string myGroup;
public string Name
{
get
{
return myName;
}
set
{
myName = value;
OnPropertyChanged();
}
}
public string Group
{
get
{
return myGroup;
}
set
{
myGroup = value;
OnPropertyChanged();
}
}
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName_in = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName_in));
}
public override string ToString()
{
return $"{Group}: {Name}";
}
}
}
1 ответ
CollectionViewSource
с включенной оперативной группировкой не работает в контексте консольного приложения, где нет диспетчера, доступного по тем же причинам, о которых говорилось в ответах на ваш другой вопрос: