5

我正在使用 RadDataFilter 过滤 RadTreeView 的 ItemSource,但是当执行此代码时,过滤器仅适用于不足的根节点。有没有办法让过滤器在节点的层次结构中向下渗透,以便为每个节点调用我的谓词?换句话说,过滤器可以应用于整个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 值继承。树中的每个节点都有自己的 ItemsCollection,它有自己的 Filter。如何设置每个节点的过滤器?

4

1 回答 1

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

于 2013-05-17T16:54:46.050 回答