尝试从派生类向 GridViewDataColumn 添加筛选器

Trying to add a filter to a GridViewDataColumn from a derived class

提问人:Coelho 提问时间:10/26/2023 最后编辑:Coelho 更新时间:10/30/2023 访问量:23

问:

所以我有以下场景 带有列表的 binging 的 RadGridView

这是我的 XAML

<telerik:RadGridView 
   x:Name="grid" 
   Grid.Row="0"
   ItemsSource="{Binding BaseClassesList}"
   IsFilteringAllowed="True"
   IsReadOnly="true">
   
   <telerik:RadGridView.Columns>
      <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" />
      <telerik:GridViewDataColumn>
         <DataTemplate DataType="{x:Type DerivedClass}">
            <TextBlock Text="{Binding WhatIWant}"/>
         </DataTemplate>
      </telerik:GridViewDataColumn>
   </telerik:RadGridView.Columns>

</telerik:RadGridView> 

这是我的 ViewModel

public List<BaseClass> BaseClassesList {get;set;}

这是我的基类

public class BaseClass
{
   public string Name{ get; set; }
   public string Filler1{ get; set; }
   public string Filler2{ get; set; }
}

这是我的 DerivedClass

public class DerivedClass : BaseClass
{
   public string WhatIWant{ get; set; }
}

正如你所看到的,我正在绑定到一个基类列表,一切正常,我可以得到我想要的所有信息。 但是,由于我正在访问 BaseClass 而不是 DerivedClass 的列表,因此 GridViewDataColumn 无法发挥其魔力并允许列筛选器工作。漏斗图标/按钮不显示。 除此筛选器功能外,所有信息都正确显示在网格中

我尝试定义 DataTemplate、DataMemberPath、Filtering 标志,但到目前为止什么都没有。

WPF XAML TELERIK WPF-CONTROLS 电信网格

评论

0赞 Mr. Squirrel.Downy 10/27/2023
尝试询问此库团队
0赞 Ferid Š. Sejdović 10/29/2023
过滤器描述代码?10 年前,我在 Telerik 工作(之后两个解决方案都没有),我记得很多事情(让我们这样说)。

答:

0赞 Coelho 10/30/2023 #1

因此,经过大量的墙壁撞击和岩石砸碎,我最终找到了解决方案。 但在此之前,为了简单起见,我之前没有说的是我有第三个派生类,我想访问的是它

public class DerivedDerivedClass : DerivedClass 
{
    public string WhatIWant{ get; set; } //Removed from here
}

第一件事是将我想要访问的内容移动到基类的第一个派生中

public class DerivedDerivedClass : DerivedClass 
{
    public string WhatIWant{ get; set; } //Removed from here
}
public class DerivedClass : BaseClass 
{
    public string WhatIWant{ get; set; } //Placed here
}

在 XAML 网格中,我必须将 DataType 和 FilterMemberPath 添加到该列中。我最初在 DataTemplate 上有 DataType,但这不起作用

<telerik:RadGridView.Columns>
    <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" />
    <telerik:GridViewDataColumn DataType="{x:Type DerivedClass}" FilterMemberPath="WhatIWant">
        <DataTemplate DataType="{x:Type DerivedClass}"> //DataType should not be defined here
            <TextBlock Text="{Binding WhatIWant}"/>
        </DataTemplate>
    </telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>