Multiselect-ComboBox
Multiselect-ComboBox copied to clipboard
Filter Service doesn't work immediately
Hi,
I have a little problem when I want to apply a custom filter service. Apparently the filter is only applied after using the edit mode and then change the focus. SetFilter runs immediately. However, the linked method is only applied after the described procedure.
This is my XAML:
<DataGridTemplateColumn Header="Users" x:Name="usercombo" Width="3*" Visibility="{Binding DataContext.IsAdmin, Source={x:Reference dummyElement}, Converter={StaticResource BoolToVis}, Mode=OneWay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<sdl:MultiSelectComboBox MinWidth="150" MinHeight="35" VerticalAlignment="Center" HorizontalAlignment="Center"
EnableFiltering="True"
FilterService="{Binding FilterService, diag:PresentationTraceSources.TraceLevel='High'}"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
Path=DataContext.AllAllowedUsers, Mode=OneWay}"
EnableAutoComplete="False"
EnableGrouping="False"
IsEditable="True"
SelectionMode="Multiple"
ClearFilterOnDropdownClosing="True"
DropdownItemTemplate="{StaticResource MultiSelectComboBox.Dropdown.ListBox.ItemTemplate}"
SelectedItemTemplate="{StaticResource MultiSelectComboBox.SelectedItems.ItemTemplate}"
SelectedItems="{Binding FancyUsers, Mode=TwoWay, UpdateSourceTrigger=LostFocus}">
</sdl:MultiSelectComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
This is my custom filter:
public class AdminFilter : IFilterService
{
public void SetFilter(string criteria)
{
ConfigureFilter();
}
public Predicate<object> Filter { get; set; }
private bool FilteringByUserRole(object item)
{
FancyUser user = item as FancyUser;
//Return user whose User-Role isn't Admin
return (user.user.fk_user_role_id > 1);
}
private void ConfigureFilter()
{
Filter = FilteringByUserRole;
}
}
I apply the filter in my object after creating my ObservableCollection as follows:
FilterService = new AdminFilter();
NotifyPropertyChanged(nameof(FilterService));
In your example project the filter works immediately. Did I miss something? Thx