2010-05-23 8 views
1

J'ai passé beaucoup trop de temps avec ceci et ne peux pas trouver l'erreur. Peut-être que je manque quelque chose de très évident ou que je viens de trouver un bogue dans l'hôte d'élément WPF pour Winforms.Bug avec DataBinding dans l'hôte WPF dans Winforms?

Je lie un ListView à un ObeservableList qui vit sur mon ProductListViewModel. J'essaye d'implémenter la recherche de ListView avec l'idée générale pour juste changer le ObservableList avec une nouvelle liste qui est filtrée.

Quoi qu'il en soit, le code de liaison ListView ressemble à ceci:

<ListView ItemsSource="{Binding Path=Products}" SelectedItem="{Binding Path=SelectedItem}" SelectionMode="Single"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"></Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Et le code ViewModel est aussi la vanille qu'il peut obtenir:

private ObservableCollection<ProductViewModel> products; 
public ObservableCollection<ProductViewModel> Products 
{ 
    get { return products; } 
    private set 
    { 
     if (products != value) 
     { 
      products = value; 
      OnPropertyChanged("Products"); 
     } 
    } 
} 

Maintenant, le problème ici: Une fois que je débogage dans mon OnPropertyChanged méthode, je peux voir qu'il n'y a pas d'abonnés à l'événement PropertyChanged (c'est nul), donc rien ne se passe sur l'interface utilisateur .. J'ai déjà essayé Mode = TwoWay et d'autres modes de liaison, il semble que je ne peux pas obtenir le ListView abonnez-vous à ItemsSource ...

Quelqu'un peut-il m'aider avec ceci? Je suis sur le point d'oublier le ElemenHost et juste le faire dans Winforms

salutations Daniel

Répondre

1

Y at-il une erreur obligatoire dans la fenêtre de sortie? Par ailleurs, vous devriez envisager de faire en sorte que la vue de la collection encapsule vos produits, puis de filtrer la vue, plutôt que de remplacer la collection entière.

Le code serait quelque chose comme:

var collectionView = CollectionViewSource.GetDefaultView(Products); 
collectionView.Filter += item => ...; 
+0

Salut Julien. Merci pour le tipp, mais je ne trouve aucune erreur DataBinding dans la fenêtre de sortie. C'est ce qui choque ici. Comme la liste ne charge après tout, elle ne s'abonne pas aux mises à jour. Je vais regarder dans le filtrage. Merci! – Tigraine