RadDataFilter过滤RadTreeView项目

时间:2012-10-24 05:53:26

标签: c# wpf xaml telerik radtreeview

我正在使用RadDataFilter来过滤RadTreeView的ItemSource,但是当执行此代码时,过滤器仅适用于不足的Root节点。有没有办法让过滤器在节点层次结构中流淌,以便为每个节点调用我的谓词?换句话说,过滤器可以作为一个整体应用于TreeView吗?

RadDataFilter:Source绑定到ViewModel中的ObservableCollection。

<telerik:RadDataFilter Name="radDataFilter"
                           telerik:StyleManager.Theme="Metro"
                           Grid.Row="2"
                           VerticalAlignment="Top"
                           HorizontalAlignment="Center"
                           MaxHeight="250"
                           Width="500"
                           BorderBrush="SkyBlue"
                           BorderThickness="2"                     
                           Source="{Binding SampleCollection}"
                           Margin="1" />
the RadTreeView:
 <telerik:RadTreeView  x:Name="RadTreeView1"
                                 VerticalAlignment="Top"
                                 HorizontalAlignment="Stretch"
                                 Grid.Row="1"
                                 ToolBar.OverflowMode="Always"
                                 BorderBrush="SkyBlue"
                                 BorderThickness="2"
                                 MinHeight="300"
                                 MaxHeight="500"
                                 MinWidth="500"
                                 telerik:StyleManager.Theme="Metro"
                                 ItemsSource="{Binding FilteredSource,ElementName=radDataFilter}">
        >
        <telerik:RadTreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                <TextBlock x:Name="Item" Text="{Binding SampleCode}">
                </TextBlock>
                <HierarchicalDataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsDescribed, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="true">
                        <Setter TargetName="Item" Property="Foreground" Value="Red"/>
                    </DataTrigger>
                </HierarchicalDataTemplate.Triggers>
            </HierarchicalDataTemplate>
        </telerik:RadTreeView.ItemTemplate>
    </telerik:RadTreeView>

我知道Filter是ItemsCollection的一个属性(不是DP),它不是DependencyObject,所以DP Value继承不存在。树中的每个节点都有自己的ItemsCollection,它有自己的Filter。如何设置每个节点的过滤器?

1 个答案:

答案 0 :(得分:0)

我建议使用NodeDataBound事件,该事件针对每个单独节点触发(无论层次结构级别如何)。这样,您就可以完全控制要对节点执行的过滤。

protected void RadTreeView1_NodeDataBound(object sender, RadTreeNodeEventArgs e) 
{     
    e.Node.ToolTip = (e.Node.DataItem as DataRowView)["Description"].ToString(); 
}

http://www.telerik.com/help/aspnet-ajax/treeview-server-node-databound.html