2010-12-03 11 views
3

J'ai une grille de données et une zone de liste déroulante sur le formulaire. La liste déroulante est liée à l'élément selectedI de la grille de données.Problèmes de liaison Silverlight DataGrid après l'actualisation ou la définition de selectedIndex = -1

Je charge les choses bien et si je choisis différentes lignes la liste déroulante est mise à jour correcly.

Cependant, si je place datagrid.selectedIndex = -1 après le chargement (de sorte que la première ligne n'est pas sélectionnée), la liaison de liste déroulante ne fonctionne plus. C'est un problème.

J'ai aussi un autre scénario où la chose exacte se produit. Si je filtre le DataGrid, la liaison à la liste déroulante cesse également de fonctionner.

Je liant les DataGrid à un CollectionViewSource comme ce qui suit où _codes est un ObservableCollection

   _ocvsCode = (CollectionViewSource)this.Resources["cvsCode"]; 
      _ocvsCode.Source = _codes;     
      dataGrid1.ItemsSource = _ocvsCode.View; 

Je ne sais pas pourquoi la liaison au combobox est un échec après une opération sur la grille de données.

+0

Remarque ... J'ai également une zone de texte liée à l'élément sélectionné de la grille. Cela continue à fonctionner correctement. C'est la liste déroulante qui semble être cassée ... impair – David

+0

En outre, si je change la valeur dans la liste déroulante toute sélection future de lignes de données de grille n'est pas reflétée dans la liste déroulante. C'est comme si la liaison entre la grille et la combobox était temporaire. – David

+0

Pouvez-vous montrer un peu du xaml pertinent? – AnthonyWJones

Répondre

2

La solution appropriée dans ce cas est de lier l'élément de données sélectionné à une variable, puis de lier les autres contrôles à cette variable. Il est généralement incorrect de lier directement les propriétés UIElement à d'autres propriétés UIElement. Cela permettra également de déboguer le problème que vous semblez avoir à contraindre la propriété selecteditem à la combo-box.

0

J'ai rencontré le même problème, où un ComboBox est lié à la valeur de SelectedItem d'un DataGrid.

Le contrôle ComboBox est interrompu lorsque les données qu'il lie deviennent nulles et ne récupèrent jamais. Je ne sais pas pourquoi, mais ça me semble être un bug. Lorsque le DataGrid trie une colonne, il définit d'abord son objet SelectedItem sur null, effectue le tri, puis réinitialise SelectedItem à la valeur d'origine. Lorsque SelectedItem devient null, le ComboBox casse.

Voici mon travail autour de:

Créer une propriété SelectedItem sur votre classe qui est utilisée pour la DataContext. Effectuez une vérification sur le setter qui l'empêche d'être défini sur null. Liez sur cette propriété avec votre DataGrid et ComboBox.

public YourItem SelectedItem 
{ 
    get { return _selectedItem; } 
    set 
    { 
     if (value == _selectedItem || value == null) 
      return; 

     _selectedItem = value; 
     RaisePropertyChanged("SelectedItem"); 
    } 
}