Необходимо решение данного вопроса :
Есть DataGrid. В него я кладу ObservableCollection<T>
. Конечно можно туда положить ListCollectionView
, но это мне не поможет. Так как :
IsLiveFiltering
и
LiveShaping
.ListCollectionView
из костылей, где у
меня две ObservableCollection<T>
. Одна выполняет функцию SilentArray
как в ListCollectionView
- просто контейнер, и другая выполняет
функцию CollectionView
которая торчит наружу в UI. Я слежу за
изменениями в своем "SilentArray"
и решаю по фильтру что с ним
делать - удалить из View если он там есть, оставить или добавить
(исходя из того - подходит под фильтр или нет).Сейчас я столкнулся с проблемой что мне нужна "живая сортировка". Допустим у вас есть лист из 10 элементов. Числа. Отсортированы они по возрастанию. И вдруг одно число поменялось, естественно в меньшую сторону или в большую. В данный момент ничего не происходит.
Но я подумал и решил - можно взять и бинарным поиском найти местечко в коллекции под данный итем. Это быстрее чем обычная сортировка DataGrid
. Сравните сложность быстрой сортировки и бинарного поиска.
Но проблема в том что я не могу своей DataGrid
(exDataGrid - расширенной). Обнови свой view, он просто не реагирует. Кусок кода - к чему я пришел в своих размышлениях
public class ExDataGrid : DataGrid
{
private readonly object m_sync = new object();
public static readonly DependencyProperty PropertyTypeProperty =
DependencyProperty.Register("ReleavntCollectionView", typeof (RelevantCollectionView), typeof (ExDataGrid),
new FrameworkPropertyMetadata()
{
DefaultValue = null,
});
public RelevantCollectionView ReleavntCollectionView
{
get { return (RelevantCollectionView) GetValue(PropertyTypeProperty); }
set { SetValue(PropertyTypeProperty, value); }
}
protected override void OnSorting(DataGridSortingEventArgs _e)
{
_e.Handled = true;
PrepareSort(_e.Column);
if (ReleavntCollectionView.IsCanSort)
{
SetSortPropertyToColumn(_e.Column);
ReleavntCollectionView.SortByField(_e.Column.SortMemberPath, _e.Column.SortDirection.Value);
}
}
private void PrepareSort(DataGridColumn _sortColumn)
{
if(_sortColumn == null)
throw new ArgumentNullException("_sortColumn");
if(!CanUserSortColumns || !_sortColumn.CanUserSort)
return;
if(!Columns.Any())
return;
foreach (var column in Columns)
{
if(column == _sortColumn)
continue;
column.SortDirection = null;
}
}
private void SetSortPropertyToColumn(DataGridColumn _sortColumn)
{
if(_sortColumn == null)
throw new ArgumentNullException("_sortColumn");
ListSortDirection sortDirection = ListSortDirection.Ascending;
if (_sortColumn.SortDirection.HasValue && _sortColumn.SortDirection == ListSortDirection.Ascending)
{
_sortColumn.SortDirection = ListSortDirection.Descending;
}
else
{
_sortColumn.SortDirection = sortDirection;
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Когда я открываю решение для UWP в visual studia то у меня выскакивает такой вот диалог:
Пишу программу с интерфейсом, сделал что-то подобноеВид из редактора Студии: