Делаю фильтр по поиску
var a1 = shetaviewModel.shetas.Where(x => GetPropertyValue(x, sd) != null);
this.list1.ItemsSource = a1;
и все нормально работает до тех пор пока не произошла корректировка какой-либо строки . После корректировки мне надо сделать
this.list1.Columns[sortcolumn].Sort(System.ComponentModel.ListSortDirection.Ascending));
и фильтр пропал , возвращается нефильтрованная таблица . Как бы это обойти .
list1.ItemsSource = a1. Самый простой пример привязки: В конструкторе окнаDataContext = this;, в этом-же классе окна делаете публичное свойство нужного типа, например текстpublic string SomeText {get;} = "Некий текст";, далее в XAML пишете<TextBlock Text = "{Binding SomeText}" />, все, на экране у васНекий текст. Сложно? Не думаю... – EvgeniyZ Jan 27 '24 at 14:30= this, а= new НекийКласс();. Ну и в итоге приходите к такому, где у вас есть данные, которые обернуты вICollectionView, который уже и привязывается к вашемуlist1. Ну а самомуICollectionViewзадаете уже хоть фильтр, хоть сортировку. То, что вы сейчас делаете - это вы сами себе палки в колеса пихаете, ибо вместо того, чтоб позволить проекту помогать вам, вы берете всю ответственность на себя, зачем - не понятно.. – EvgeniyZ Jan 27 '24 at 14:32у меня так и сделано- я этого не вижу. Я вижу что вы имеете проблему скорей всего из-за того, что вы именно так не делаете, ибо имея привязки, о всякихItemsSourceзабывается вовсе.нет никакого смысла- использовать молоток для варки супа, или всеж половник? Зачем использовать то, что положено, если через пару часов будет съедено, вот ваша логика. Я вам не говорю писать прям идеально, я вам говорю, чтоб вы писали как положено, криво, косо, без разницы, но с привязками.или можно сделать по другому- я вам уже сказал как делать, там не две коллекции, а обертка одной над другой. – EvgeniyZ Jan 28 '24 at 12:43у меня есть большие обьемы- тогда такое надо делать на уровне базы, получать уже из нее отфильтрованный кусок данных, а не грузить все на клиента и сортировать там. Ваш вопрос сейчас про клиентскую фильтрацию, ну а за нее отвечаетICollectionView, где вы на лету можете ставить любой фильтр и любую сортировку, чего автоматически подтянет UI и отобразит это как надо. – EvgeniyZ Jan 28 '24 at 12:45где находится- Это уже спрашивайте у создателей авалонии, ибо это стандартный компонент WPF, на котором они и основывали свой проект, видать вынесли в отдельную библиотеку, ищите, должен быть либо он, либо аналог.для поиска ИВАНОВА- что мешает взять из базы всех таких пользователей и отобразить только их? На клиенте должны быть только важные данные, не более. Если вы грузите туда 100к строк ради лишь поиска на клиенте, чтож, это печально... – EvgeniyZ Jan 28 '24 at 13:12ICollectionViewв авалонии походу обернули вDataGridCollectionView, действует судя по документации, аналогично, можете взять ее.Как мне вытащить имя прибинденного обьекта- не работайте с UI, работайте с данными. У вас есть привязанная коллекция - вот из нее и берите все, что хотите. Нужно то, что выделено, создайте отдельно публичное свойство и привяжите его к условномуSelectedItem, будете всегда иметь в данном свойстве то, что сейчас выделено. – EvgeniyZ Jan 28 '24 at 13:35class User { public int Id {get;set;} public string Name {get; set;} }...public List<User> Users {get;} = new {new User { Id = 1, Name = "Вася" }}; public User SelectedUser {get;set;}...<DataGrid ItemsSource = "{Binding Users}" SelectedItem = "{Binding SelectedUser}" />, данный код выведет на экран одного пользователя, у которого будет 2 колонки, ну а при выделении, вSelectedUserбудет сам класс, из которого и получайте данные. – EvgeniyZ Jan 28 '24 at 14:00var result = Users.Where(x=>x.Name == "Вася");, ну а в случае с фильтрацией (если ее настроили), там будет что-то по типуFilter = user => user.Name == "Вася";Ну, то есть простая работа с классами, а не с UI. – EvgeniyZ Jan 28 '24 at 14:02list1.Columns), вместо того, чтоб просто пойти и сделать. Я ведь вам даже ссылку кидал с подробнейшим примером, но нет, мы уже с вами битый час говорим об одном.... – EvgeniyZ Jan 28 '24 at 14:35