2010-04-15 4 views
0

Configuration:Mainaining sélection radio après le changement de source d'élément

J'ai un combo-box, il est ItemSource lié à un ObservableCollection < T> d'une classe personnalisée, une propriété est une liste < MyEnum>.

J'ai un itemcontrol qui est databound à l'élément sélectionné de la combo-box Liste < myenum> propriété.

Le datatemplate itemscontrol crée une liste de radiobuttons, chacun représentant les valeurs enum individuelles de la liste.

Le désir:

Quand je change la valeur dans la liste déroulante la source de ItemsControl est mis à jour. Ce que je veux faire, c'est si un bouton radio dans la nouvelle source itemscontrol est le même que le radiobuton sélectionné dans la liste précédente (avant qu'il ne soit mis à jour), ceci doit être vérifié.

Idée actuelle:

Asign un événement vérifié aux boutons radio, qui maintient une propriété MyEnum dans la classe de fenêtre qui peut être comparée. Rendre la propriété IsChecked du radiobox lié à un convertisseur et comparer avec la propriété myenum. Pour y parvenir, j'ai fait en sorte que la classe de fenêtre s'étende de IValueConverter, de cette façon la fonction de conversion a accès à la propriété myenum.

Problème:

Je ne sais pas comment obtenir le IsChecked se liant à utiliser la fenêtre comme le convertisseur. Je l'ai essayé d'utiliser source par rapport à la partie de conversion de la liaison, mais cela ne fonctionne pas IsChecked="{Binding Converter={RelativeSource={RelativeSource Self}}}"

Réponses préférées:

Assistance à la correction de la syntaxe de liaison s'il est possible de cette façon.

Idées d'un moyen plus approprié d'atteindre ce que je voudrais.

Répondre

0

Je ne sais pas non plus comment utiliser la fenêtre comme un convertisseur de valeur en xaml. Créez à la place une classe de convertisseur de valeur autonome avec une propriété publique pour le type enum. Ensuite, dans le constructeur de la fenêtre, obtenez une référence à l'instance du convertisseur de valeur et stockez-la dans un membre privé.

XAML:

<local:MyValueConverter x:Key="ConvertSomething" /> 
code

derrière:

private MyValueConverter _myValueConverter; 

public Window1() 
{ 
    InitializeComponent(); 

    _myValueConverter = FindResource("ConvertSomething") as MyValueConverter; 
} 

private void RadioButton_Checked(object sender, RoutedEventArgs e) 
{ 
    // You can access _myValueConverter here and set its public enum property.  
} 
+0

C'est la route que j'ai pris à la fin. A dû changer la liaison à Mode = OneWay aussi bien. Mais tout fonctionne maintenant. – Psytronic

Questions connexes