我有一个带有GridViewDataColumn的GridView,我想从中筛选出布尔值,但我不希望它写“True”或“False”在过滤器中但“Vrai”和“Faux”(法语)
目前过滤器是自动完成的(打印“True”和“False”并过滤),我无法访问布尔值的ToString()方法。 在我的代码后面我加载模型并设置我的过滤器如果“Filtersettings”不为空(当用户保存其参数时,很少发生)
我的XAML,我想过滤列“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"/>
我的代码后面
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);
}
}
答案 0 :(得分:0)
您可以尝试使用转换器,按照此处的建议返回已翻译的字符串: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>
答案 1 :(得分:0)
我使用了转换器。
XAML
<telerik:GridViewDataColumn Header="Intégrée" DataMemberBinding="{Binding IsIntegree,Converter={StaticResource BooleanToStringConverter}, Mode=OneWay}" ShowDistinctFilters="True">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsIntegree, Mode=TwoWay}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
转换器(不要忘记声明)
public class BooleanToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = System.Convert.ToBoolean(value, CultureInfo.InvariantCulture);
return val ? "Vrai" : "Faux";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string temp = value.ToString();
return temp.ToLower().Equals("vrai") ? true : false;
}
}