2009-06-04 13 views
0

Je travaille sur la création d'un contrôle WPF CheckedComboBox. Je veux ajouter un SelectedValuesProperty que je pourrais lier via XAML. J'ai essayé plusieurs choses et je n'ai pas encore réussi à le faire fonctionner. Quelqu'un at-il des suggestions sur la façon d'aborder cela? Mon contrôle hérite de MultiSelector. Merci d'avance!Implémenter la propriété SelectedValues ​​sur le contrôle WPF

C'est ce que j'ai à ce jour, problème est que je ne peux pas obtenir le ItemContainer de l'objet:

public static readonly DependencyProperty SelectedValuesProperty = DependencyProperty.Register( 
    "SelectedValues", typeof(IEnumerable), typeof(CheckedComboBox), 
     new FrameworkPropertyMetadata((IEnumerable) null, 
     new PropertyChangedCallback(OnSelectedValuesChanged))); 

private static void OnSelectedValuesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    CheckedComboBox combo = (CheckedComboBox) d; 
    IEnumerable oldValue = (IEnumerable) e.OldValue; 
    IEnumerable newValue = (IEnumerable) e.NewValue; 

    // unselect all the old vlaues 
    if (oldValue != null) 
    { 
    foreach (object obj in oldValue) 
    { 
     CheckedComboBoxItem item = obj as CheckedComboBoxItem; 
     if (item == null) 
     item = combo.ItemContainerGenerator.ContainerFromItem(obj) as CheckedComboBoxItem; 
     if (item != null && item.IsEnabled && item.IsSelected) 
     item.IsSelected = false; 
    } 
    } 

    // select all the new values 
    if (e.NewValue != null) 
    { 
    foreach (object obj in newValue) 
    { 
     CheckedComboBoxItem item = obj as CheckedComboBoxItem; 
     if (item == null) 
     item = combo.ItemContainerGenerator.ContainerFromItem(obj) as CheckedComboBoxItem; 
     if (item != null && item.IsEnabled && !item.IsSelected) 
     item.IsSelected = true; 
    } 
    } 
} 

Répondre

0

J'essaie de comprendre ce même problème. J'ai besoin d'un SelectedValues ​​(pas SelectedItems) à utiliser en conjonction avec SelectedValuePath de sorte que si je passe dans une collection d'objets, je peux spécifier une propriété sur ces objets pour utiliser les valeurs retournées. SelectedValues ​​retournera une collection de valeurs.