2012-10-24 19 views
5

RadDataFilterを使用してRadTreeViewのItemSourceをフィルタリングしていますが、このコードを実行すると、フィルタはルートノードにのみ適用されます。私の述語がすべてのノードに対して呼び出されるように、ノードの階層内でフィルタを細かくする方法がありますか?言い換えれば、フィルタは全体としてTreeViewに適用できますか?Filter RadTreeView Items by RadDataFilter

RadDataFilter:ソースが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> 

私はフィルターのDependencyObjectないので、DP値の継承がないItemsCollectionの性質(DPではない)であることが知られています。ツリーの各ノードには独自のItemsCollectionがあり、独自のFilterを持っています。すべてのノードのフィルタを設定するにはどうすればよいですか?

+0

あなたはすべての子供にあなたのフィルタを適用し、その後LoadOnDemand機能を使用することはできますか?理論的には、特にデータセットが大きくなる場合は、パフォーマンスを向上させるはずです。 –

+0

この質問をしてください。私はtelerikフォーラムで意味します。彼らはおそらく答えを持っています。 – Cagatay

答えて

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