IEnumerable Enums的转换器

时间:2015-12-01 17:49:56

标签: c# enums

我的组合框绑定到一组枚举。我试图过滤掉一些显示的枚举。

我尝试了以下内容,但它没有过滤掉任何内容,只是返回原始集合。

<telerik:GridViewComboBoxColumn Header="Occurences" 
                                ItemsSource="{Binding Source={StaticResource ScheduleItems}, 
                                Converter={StaticResource ScheduleItemsEnumConverter}, Mode=OneWay}" />

public class ScheduleItemsEnumConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var collection = ((IEnumerable<LoanCalculator.ScheduleItems>)value).Cast<LoanCalculator.ScheduleItems>();
        collection  =
            collection.Where(
                x =>
                    !x.Equals(LoanCalculator.ScheduleItems.CapitalizedFee) ||
                    !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInsurance) ||
                    !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInterest));
        return collection;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我知道where子句是可以的,因为填充组合框的其他方法工作正常。

public IEnumerable<LoanCalculator.ScheduleItems> EventTypes
{
    get
    {
        return
            Enum.GetValues(typeof(LoanCalculator.ScheduleItems))
                .Cast<LoanCalculator.ScheduleItems>()
                .Where(
                    x =>
                        !x.Equals(LoanCalculator.ScheduleItems.CapitalizedFee) ||
                        !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInsurance) ||
                        !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInterest));
    }
}

请问我如何将转换器应用于状态资源或转换枚举集

1 个答案:

答案 0 :(得分:1)

你的逻辑错了。你想“和”条件不是“或”他们。您也不需要Cast<LoanCalculator.ScheduleItems>

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return  ((IEnumerable<LoanCalculator.ScheduleItems>)value)
        .Where(
            x =>
                !x.Equals(LoanCalculator.ScheduleItems.CapitalizedFee) &&
                !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInsurance) &&
                !x.Equals(LoanCalculator.ScheduleItems.CapitalizedInterest));
}