2012-10-24 17 views
5

Używam RadDataFilter do filtrowania ItemSource z RadTreeView, ale kiedy ten kod jest wykonywany, filtr stosuje się tylko do węzłów root, które są niewystarczające. Czy istnieje sposób, aby filtr został obniżony w hierarchii węzłów, aby mój predykat był wywoływany dla każdego węzła? Innymi słowy, czy filtr można zastosować do TreeView jako całości?Filter RadTreeView Przedmioty według RadDataFilter

RadDataFilter: źródło jest wiążące dla ObservableCollection w ViewModel.

<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> 

I wiedzieć, że filtr jest właściwością (nie DP) ItemsCollection który nie jest DependencyObject i tak DP Wartość dziedziczenie nie ma. Każdy węzeł w drzewie ma własną kolekcję ItemsGollection, która ma własny filtr. Jak mogę ustawić każdy filtr węzła?

+0

można użyć funkcji LoadOnDemand następnie zastosować filtr do każdego dziecka, jak to zostanie dodana do drzewa? Teoretycznie powinno to poprawić wydajność, szczególnie jeśli twoje zbiory danych będą rosły. –

+0

powinieneś zadać to pytanie telomerowi. Mam na myśli na forach telerik. Prawdopodobnie mają odpowiedź. – Cagatay

Odpowiedz

0

Polecam używanie zdarzenia NodeDataBound, które jest uruchamiane dla każdego pojedynczego węzła (niezależnie od poziomu hierarchicznego). W ten sposób możesz całkowicie kontrolować, jakie filtrowanie chcesz wykonać w węźle.

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