我正在使用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。如何设置每个节点的过滤器?
答案 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