Я здесь с новой проблемой.Связывание свойства внутри CollectionViewSource с собственностью ViewModel
У меня есть DataGrid и текстовое поле. Я хотел бы отфильтровать DataGrid на основе значения TextBox.
Я это сделал используя MarkupExtensions
как упомянуто here.
Теперь он отлично работает до свойства Value (свойство класса PropertyFilter, как указано в ссылке выше) представляет собой строку, указанную в XAML. Когда я меняю его на привязку, он перестает работать. Вот моя XAML с обязательным:
<CollectionViewSource x:Key="GroupsViewSource" Source="{Binding Groups}">
<CollectionViewSource.Filter>
<me:Filter>
<me:PropertyFilter PropertyName="GroupName"
Value="{Binding SearchGroupName}" />
</me:Filter>
</CollectionViewSource.Filter>
</CollectionViewSource>
SearchGroupName простое свойство типа строки в моем ViewModel.
Я также попытался изменить связывание следующим образом:
Value = "{Binding DataContext.SearchGroupName, RelativeSource={RelativeSource
Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Я пытался отладить ее, используя System.Diagnostics следующим образом:
<CollectionViewSource x:Key="GroupsViewSource" Source="{Binding Groups}">
<CollectionViewSource.Filter>
<me:Filter>
<me:PropertyFilter PropertyName="GroupName"
Value="{Binding SearchGroupName, diag:PresentationTraceSources.TraceLevel=High}" />
</me:Filter>
</CollectionViewSource.Filter>
</CollectionViewSource>
Но тогда я получаю ошибку компиляции: неизвестное свойство PresentationTraceSources.TraceLevel для System.Windows.Data.Binding ......
Я думаю, что моя привязка к RelativeSource не работает, потому что я думаю, что Co llectionViewSource не является членом Visual/Logical Tree.
Таким образом, я думаю, что мой DataContext может быть нулевым. Какие решения вы предпочитаете, если находитесь в одной и той же ситуации ?????
Я использовал 'х: Reference', как вы предложили. Теперь мое привязка правильное, когда я положил ValueConverter и поставил в нем точку останова, он показывает ожидаемое значение. Но dataGrid не фильтруется, когда я пишу что-либо в текстовом поле. Я также изменил UpdateSourceTrigger на PropoertyChanged. Но когда я нажимаю на заголовок столбца DataGrid, фильтр работает. – Vishal
Невозможно, чтобы «CollectionViewSource» знал, что результаты метода фильтра фильтра изменены, вам нужно как-то его обновить. Не знаю, как это можно сделать, хотя ... –
Спасибо. Тогда мне придется найти другой подход для фильтрации данных. – Vishal