2010-07-02 3 views
1

J'utilise WCF et modèle MVVM pour remplir un contrôle arborescence et j'ai besoin de l'élément sélectionné passé en paramètre pour une autre méthode dans le modèle de vue (pour remplir un contrôle différent).WPF MVVM TreeView élément sélectionné ne remplit pas objet de sélection en cours

La vue arborescente se remplit très bien mais la valeur sélectionnée n'est pas transmise au modèle de vue. par exemple. dans le viewmodel:

private ICollectionView m_SuppliersView; 
    public ObservableCollection<SupplierItem> SupplierItems 
    { 
     get 
     { 
      return supplierItems; 
     } 
     private set 
     { 
      if (supplierItems == value) 
      { 
       return; 
      } 
      supplierItems = value; 
      OnPropertyChanged("SupplierItems"); 
     } 
    } 
    public SupplierItem CurrentSupplier 
    { 
     get 
     { 
      if (m_SuppliersView != null) 
      { 
       return m_SuppliersView.CurrentItem as SupplierItem; 
      } 

      return null; 
     } 
    } 
    private void OnCollectionViewCurrentChanged(object sender, EventArgs e) 
    { 
// view model is inherited from a base class. base method listed below 
     OnPropertyChanged("CurrentSupplier"); 
    } 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     VerifyPropertyName(propertyName); 

     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      var e = new PropertyChangedEventArgs(propertyName); 
      handler(this, e); 
     } 
    } 

    private void Load() // Load event to populate the treeview source object 
    { 
// SupplierItems object is populated just fine and treeview displays just fine so I won't show how the sausage is made. I believe the issue is here: 
     m_SuppliersView = CollectionViewSource.GetDefaultView(SupplierItems); 

     if (m_SuppliersView != null) 
     { 
      m_SuppliersView.CurrentChanged += OnCollectionViewCurrentChanged; 
     } 

     OnPropertyChanged("CurrentSupplier"); 

dans le XAML:

<Window.Resources> 
     <HierarchicalDataTemplate x:Key="SuppiersDistributorsTemplate" ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding ManagedLocationName}"/> 
     </HierarchicalDataTemplate> 
</Window.Resources> 


<TreeView x:Name="tvSuppliers" ItemsSource="{Binding SupplierItems}" 
      ItemTemplate="{StaticResource SuppiersDistributorsTemplate}" 
      SelectedValuePath="CurrentSupplier">    
</TreeView> 

Toute réflexion sur ce sujet?
Lorsque je définis un point d'arrêt dans la méthode "OnCollectionViewCurrentChanged", rien ne se produit lorsque je clique sur un nœud treeview. c'est-à-dire que "CurrentSupplier" n'est jamais mis à jour, donc je ne peux pas utiliser CurrentSupplier dans une autre méthode que j'ai (pour charger une collection pour un autre contrôle).

Merci

Répondre

1
+0

eu à travailler par l'application et la mise au rebut en utilisant l'architecture décrite ici: http://msdn.microsoft.com/en -us/magazine/dd419663.aspx L'élément sélectionné de treeview (SupplierID, PartID, etc.) est ensuite utilisé comme entrée pour la collection ItemSource d'un contrôle gridview. voir cet article: http://tomlev2.wordpress.com/2009/04/17/wpf-binding-to-an-asynchronous-collection/ –

Questions connexes