在GridView WPF中覆盖默认布尔过滤,应用自定义布尔过滤器 [英] Override default Boolean Filtering in GridView WPF, Apply Custom bool filter

查看:129
本文介绍了在GridView WPF中覆盖默认布尔过滤,应用自定义布尔过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个GridView与GridViewDataColumn,我想从中过滤布尔值,但我不想写它TrueFalse在过滤器中,但VraiFaux(法语)



(打印True和False并过滤),我无法访问布尔的ToString()方法。
在我的Code后面加载模型并设置我的过滤器,如果Filtersettings不为null(当用户保存了它的参数,很少发生)



我的XAML,我想过滤列Intégrée

 < telerik:GridViewColumn MinWidth = 33 > 
< telerik:GridViewColumn.CellTemplate>
< DataTemplate>
[某些东西]
< / DataTemplate>
< / telerik:GridViewColumn.CellTemplate>
[我在这里删除了一些东西]
< / telerik:GridViewColumn>
< Style.Triggers>
< DataTrigger Binding ={Binding Valide}Value =False>
< Setter Property =telerik:GridViewCell.BackgroundValue ={StaticResource ValidationErrorColorBrush}/>
< / DataTrigger>
< / style>
< / telerik:GridViewDataColumn.CellStyle>
< / telerik:GridViewDataColumn>
< telerik:GridViewDataColumn Header =IntégréeUniqueName =IntégréeDataMemberBinding ={Binding IsIntegree,Mode = OneWay}ShowDistinctFilters =True/>

我的代码隐藏

  public partial class DemandeCotationListeView:UserControl 
{
public DemandeCotationListeView()
{
InitializeComponent();
DemandeCotationListeViewModel demandeCotationViewModel = new DemandeCotationListeViewModel();
DataContext = demandeCotationViewModel;

//应用个性化过滤器
for(int cpt = 2; cpt< GridView.Columns.Count; cpt ++)
{
GridView.Columns [cpt] .FilteringControl = new PersonalizedFilteringControl(GridView.Columns [cpt]);
}

//这里我试图访问过滤器
Telerik.Windows.Controls.GridViewColumn isIntegreeColumn = this.GridView.Columns [Intégrée];
IColumnFilterDescriptor integreeFilter = isIntegreeColumn.ColumnFilterDescriptor;
//我不能添加一个字符串,而是一个对象
// integreeFilter.DistinctFilter.AddDistinctValue(Faux);


private void GridView_Loaded(object sender,RoutedEventArgs e)
{
try
{
IList< FilterSetting> filtersSettings = JsonConvert.DeserializeObject< IList< FilterSetting>>(Settings.Default.DemandeCotationViewFilterConfig);
//因为filterSettings总是为空
if(filtersSettings!= null)
{
foreach(filtersSettings中的FilterSetting filterSetting)
{
IColumnFilterDescriptor filter = GridView.Columns [filterSetting.ColumnUniqueName] .ColumnFilterDescriptor;
foreach(filterSetting.SelectedDistinctValues中的object distinctValue)
{
if(distinctValue.GetType()== typeof(bool))
{
bool value =(bool )distinctValue;
if(value)
{
filter.DistinctFilter.AddDistinctValue(Vrai);
}
else
{
filter.DistinctFilter.AddDistinctValue(Faux);
}
}
else
{
filter.DistinctFilter.AddDistinctValue(distinctValue);



if(filterSetting.Filter1!= null)
{
filter.FieldFilter.Filter1.Operator = filterSetting.Filter1.Operator;
filter.FieldFilter.Filter1.Value = filterSetting.Filter1.Value;
filter.FieldFilter.Filter1.IsCaseSensitive = filterSetting.Filter1.IsCaseSensitive;
}
filter.FieldFilter.LogicalOperator = filterSetting.FieldFilterLogicalOperator;
if(filterSetting.Filter2!= null)
{
filter.FieldFilter.Filter2.Operator = filterSetting.Filter2.Operator;
filter.FieldFilter.Filter2.Value = filterSetting.Filter2.Value;
filter.FieldFilter.Filter2.IsCaseSensitive = filterSetting.Filter2.IsCaseSensitive;
}
}
}
ColumnSetting columnsSetting = JsonConvert.DeserializeObject< ColumnSetting>(Settings.Default.DemandeCotationViewColumnConfig);
if(columnsSetting!= null)
{
foreach(columnsSetting.ColumnPosition中的var kv)
{
GridView.Columns [kv.Key] .DisplayIndex = kv 。值;



catch(Exception exc)
{
MessageBox.Show(Chargement de la liste des contrats:+ exc.Message );



$ div $解析方案

你可以尝试使用一个转换器,返回翻译后的字符串,如下所示: http:// www .telerik.com / forums / bool-filter-translation

 < telerik:GridViewDataColumn Header =Intégrée UniqueName =IntégréeDataMemberBinding ={Binding IsIntegree,Converter = {StaticResource MyConverter}}ShowDistinctFilters =True> 
< telerik:GridViewDataColumn.CellTemplate>
< DataTemplate>
< CheckBox IsChecked ={Binding IsIntegree,Mode = TwoWay}/>
< / DataTemplate>
< / telerik:GridViewDataColumn.CellTemplate>
< / telerik:GridViewDataColumn>


I have a GridView with GridViewDataColumn from which I want to filter on the boolean values in it but I don't want it to write "True" or "False" in the filter but "Vrai" and "Faux" (french)

Currently the filter is done automatically (prints "True" and "False" and it filters), I can't access the ToString() method of the boolean. In my Code behind I load the model and setup my filters if "Filtersettings" isn't null (when user has saved its parameters, happens rarely)

My XAML, I want to filter the column "Intégrée"

<telerik:GridViewColumn MinWidth="33">
                <telerik:GridViewColumn.CellTemplate>
                    <DataTemplate>
                        [Some Stuff]
                    </DataTemplate>
                </telerik:GridViewColumn.CellTemplate>
            [I deleted some stuff here]
            </telerik:GridViewColumn>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Valide}" Value="False">
                                <Setter Property="telerik:GridViewCell.Background" Value="{StaticResource ValidationErrorColorBrush}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </telerik:GridViewDataColumn.CellStyle>
            </telerik:GridViewDataColumn>
            <telerik:GridViewDataColumn Header="Intégrée"                   UniqueName="Intégrée" DataMemberBinding="{Binding IsIntegree, Mode=OneWay}"                             ShowDistinctFilters="True"/>

My codeBehind

 public partial class DemandeCotationListeView : UserControl
    {
        public DemandeCotationListeView()
        {
            InitializeComponent();
            DemandeCotationListeViewModel demandeCotationViewModel = new DemandeCotationListeViewModel();
            DataContext = demandeCotationViewModel;

            // Apply personalized filters
            for (int cpt = 2; cpt < GridView.Columns.Count; cpt++)
            {
                GridView.Columns[cpt].FilteringControl = new PersonalizedFilteringControl(GridView.Columns[cpt]);
            }

    //Here I tried to access the filters
            Telerik.Windows.Controls.GridViewColumn isIntegreeColumn = this.GridView.Columns["Intégrée"];
            IColumnFilterDescriptor integreeFilter = isIntegreeColumn.ColumnFilterDescriptor;
    //I can't add a string but an object
           // integreeFilter.DistinctFilter.AddDistinctValue("Faux");
        }

        private void GridView_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                IList<FilterSetting> filtersSettings = JsonConvert.DeserializeObject<IList<FilterSetting>>(Settings.Default.DemandeCotationViewFilterConfig);
     //Never goes here because filterSettings is always null
                    if (filtersSettings != null)
                {
                    foreach (FilterSetting filterSetting in filtersSettings)
                    {
                        IColumnFilterDescriptor filter = GridView.Columns[filterSetting.ColumnUniqueName].ColumnFilterDescriptor;
                        foreach (object distinctValue in filterSetting.SelectedDistinctValues)
                        {
                            if (distinctValue.GetType() == typeof(bool))
                            {
                                bool value = (bool)distinctValue;
                                if (value)
                                {
                                    filter.DistinctFilter.AddDistinctValue("Vrai");
                                }
                                else
                                {
                                    filter.DistinctFilter.AddDistinctValue("Faux");
                                }
                            }
                            else
                            {
                                filter.DistinctFilter.AddDistinctValue(distinctValue);
                            }
                        }

                        if (filterSetting.Filter1 != null)
                        {
                            filter.FieldFilter.Filter1.Operator = filterSetting.Filter1.Operator;
                            filter.FieldFilter.Filter1.Value = filterSetting.Filter1.Value;
                            filter.FieldFilter.Filter1.IsCaseSensitive = filterSetting.Filter1.IsCaseSensitive;
                        }
                        filter.FieldFilter.LogicalOperator = filterSetting.FieldFilterLogicalOperator;
                        if (filterSetting.Filter2 != null)
                        {
                            filter.FieldFilter.Filter2.Operator = filterSetting.Filter2.Operator;
                            filter.FieldFilter.Filter2.Value = filterSetting.Filter2.Value;
                            filter.FieldFilter.Filter2.IsCaseSensitive = filterSetting.Filter2.IsCaseSensitive;
                        }
                    }
                }
                ColumnSetting columnsSetting = JsonConvert.DeserializeObject<ColumnSetting>(Settings.Default.DemandeCotationViewColumnConfig);
                if (columnsSetting != null)
                {
                    foreach (var kv in columnsSetting.ColumnPosition)
                    {
                        GridView.Columns[kv.Key].DisplayIndex = kv.Value;
                    }
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show("Chargement de la liste des contrats : " + exc.Message);
            }
        }

解决方案

You could try to use a converter that returns the translated strings as suggested here: http://www.telerik.com/forums/bool-filter-translation

<telerik:GridViewDataColumn Header="Intégrée" UniqueName="Intégrée" DataMemberBinding="{Binding IsIntegree, Converter={StaticResource MyConverter}}" ShowDistinctFilters="True">
    <telerik:GridViewDataColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsIntegree, Mode=TwoWay}"/>
        </DataTemplate>
    </telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>

这篇关于在GridView WPF中覆盖默认布尔过滤,应用自定义布尔过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆