2013-03-28 2 views
1

J'utilise Telerik RadGridView dans mon projet (qui est essentiellement un GridView standart). Ce composant a sa propre fonctionnalité de filtrage et je veux en profiter.Comment appliquer le filtrage côté vue dans MVVM?

Filtrage lui-même Je prévois de le faire en fonction de plusieurs valeurs sélectionnées de la liste déroulante. Donc, si j'ai une bonne idée de MVVM, j'ai besoin de lier les combos aux propriétés de ViewModel. Mais voici un problème de comment transmettre ces valeurs sélectionnées au composant View? comment faire pour actualiser le filtrage en tant que changement de valeur sélectionné?

upd: j'utilise le framework SimpleMVVM.

XAML de MainWindow:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
...... 
    DataContext="{Binding Source={StaticResource Locator}, Path=MainPageViewModel}"> 

<StackPanel Height="auto"> 
    <telerik:RadMenu VerticalAlignment="Top"> 
    ......    
    </telerik:RadMenu> 
    <my:Expander VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto"/> 
    <my:CustomerView Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto"/> 
</StackPanel> 

XAML du détendeur:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
...... > 


<Grid Margin="10,10,0,10" Width="684" Height="97" VerticalAlignment="Top" HorizontalAlignment="Left" > 

    <telerik:RadExpander x:Name="radExpander" IsExpanded="True" HorizontalAlignment="Stretch" VerticalAlignment="Top" telerik:AnimationManager.IsAnimationEnabled="True" Margin="0,0,0,0" Grid.RowSpan="2"> 
      <telerik:RadComboBox HorizontalAlignment="Left" Margin="244,-2,0,0" VerticalAlignment="Top" Width="154" Height="26" 
           ItemsSource="{Binding Path=AllLevels}" DisplayMemberPath="name" SelectedItem="{Binding SelectedEventLevel}"/> 
....... 

     </Grid> 
    </telerik:RadExpander> 
</Grid> 

XAML de CustomerView:

 <telerik1:RadGridView Name="EventList" .... ItemsSource="{Binding SportEventsList}" AutoGenerateColumns="False"> 
     <telerik1:RadGridView.Columns> 
..... 
     </telerik1:RadGridView.Columns> 
    </telerik1:RadGridView> 

Snippet du code de viewmodel:

 private ObservableCollection<sportevent> _sportEventsList; 
    public ObservableCollection<sportevent> SportEventsList 
    { 
     get { return _sportEventsList; } 
     set 
     { 
      _sportEventsList = value; 
      NotifyPropertyChanged(vm => vm.SportEventsList); 
     } 
    } 
+0

Comment imaginez-vous un filtrage? Vous voulez utiliser vos propres combos ou les fonctionnalités intégrées de RadGridView? Liez simplement la propriété 'Selecteditem' à la propriété' ViewModel' pour renvoyer la valeur sélectionnée à 'View' –

+0

@AndreyGordeev Les combos à partir desquels j'obtiens les paramètres de filtrage n'ont rien à voir avec RadGRidView. Ce sont des contrôles séparés liés aux propriétés de ViewModel. Puisque je prévois de faire du filtrage dans RGV par programmation, dans la vue, il doit obtenir les valeurs de la propriété réelle et mettre à jour un filtre. –

+0

Puis faites comme je l'ai dit - lier 'ItemsSource' et' SelectedItem' de votre 'ComboBox' aux propriétés de' ViewModel' –

Répondre

0

Ajoutez les propriétés suivantes à votre VM:

private ObservableCollection<yourType> allLevels; 
    public ObservableCollection<yourType> AllLevels 
    { 
     get 
     { 
      return allLevels; 
     } 
     set 
     { 
      allLevels = value; 
      RaisePropertyChanged("AllLevels"); 
     } 
    } 

    private yourType selectedEventLevel; 
    public yourTypeSelectedEventLevel 
    { 
     get 
     { 
      return selectedEventLevel; 
     } 
     set 
     { 
      selectedEventLevel = value; 
      RaisePropertyChanged("SelectedEventLevel"); 
     } 
    } 

Je suppose MainPageViewModel hérite SimpleViewModelBase

Questions connexes