将列过滤器绑定到转换后的值

时间:2015-07-27 17:44:55

标签: c# xaml silverlight telerik radgrid

 So there is a data model with 2 properties: first name and last name.  

我正在使用自定义转换器来显示此值 “姓氏,名字”,后面有逻辑,每当其中一个属性为null时,转换器返回null 在这种情况下,我还想在列上使用telerik过滤器,但是存在一个问题,因为它不会绑定到转换后的值而是绑定到原始数​​据。

有没有办法处理这个,并且转换了绑定到它的字符串和过滤器?

这是代码xaml / silverlight:

<RadGridView ItemsSource="{Binding PersonCollection}">

<telerik:GridViewDataColumn Header="Name" DataMemberBinding="{Binding Converter={StaticResource FirstLastNameConverter}}" /> 

</RadGridView>

默认telerik未显示,因为此处绑定是整个人物对象

和Person模型(不能改变它或围绕它做包装):

public class Person
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

2 个答案:

答案 0 :(得分:1)

您可以使用转换器以自定义PersonWrapper类型包装每个项目:

<RadGridView ItemsSource="{Binding PersonCollection,
    Converter={StaticResource ItemWrappingConverter}}">...</...>

和代码

public class ItemWrappingConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object param, CultureInfo cultur)
    {
        var persons = value as IEnumerable<Person>;
        if (persons == null) return null;
        return persons.Select(person => new PersonWrapper()
        {
            Person = person,
            FullName = GetFullName(person.FirstName, person.LastName)
        } );
    }

    public object ConvertBack(object value, Type targetT, object param, CultureInfo culture)
    { throw new NotSupportedException(); }
}

public class PersonWrapper
{
    public Person Person { get; set; }
    public string FullName { get; set; }
}

答案 1 :(得分:0)

所以问题以另一种方式解决了。我没有使用转换器,而是使用了telerik表达式。所以这种方式是对表达式进行原始绑定,并且过滤器工作正常。这是example