En principe, j'ai développé un moyen net de lier des radiobuttons à presque tout: par exemple, vous pouvez l'utiliser pour lier les radiobuttons à une propriété de chaîne comme suit (c'est un puits Bogue connu que vous devez utiliser un nom de groupe unique pour chaque Radiobutton): P> <RadioButton GroupName="F1" Content="Filter Number One"
IsChecked="{Binding Filter, Converter={local:TrueWhenEqual To='{x:Static local:ViewModelClass.Filter1}'}}"/>
<RadioButton GroupName="F2" Content="Filter Number Two"
IsChecked="{Binding Filter, Converter={local:TrueWhenEqual To='{x:Static local:ViewModelClass.Filter2}'}}"/>
3 Réponses :
C'est un bug qui peut survenir avec des points de vue imbriqués. Essayez de mettre votre balisage personnalisé dans une DLL / projet distincte ou utilisez la syntaxe d'élément de propriété. P>
Le deuxième lien a la bonne réponse (par laquelle je veux dire, la réponse facile). Je dois simplement définir un constructeur le public vraiwhwequal (objet à) {à = à; } code> puis appelez le convertisseur avec
converter = {local: truewhenequal {x: statique local: vueModelclass.filter1}}} code>
WPF ne gère pas trop les extensions de balisage imbriquées. Pour surmonter cela, vous pouvez utiliser votre extension de balisage comme élément. C'est un peu maladroit et plus difficile à lire, mais cela fonctionne:
<Window.Resources> <local:TrueWhenEqual To={x:Static local:ViewModelClass.Filter1} x:Key="myConverter" /> </Window.Resources> <RadioButton GroupName="F1" Content="Filter Number One" IsChecked="{Binding Filter, Converter={StaticResource myConverter}}" />
Clunky, mais ça marche. Eh bien, il ne
Confirmé, cette solution fonctionne sans mon cadre MVVM. La définition d'un constructeur sur la balise Markupextension est une solution bien meilleure. Ensuite, je l'ai renommé TrueWhenneQualto code> qui lit plus naturellement:
ischecked = "{filtre de liaison, convertisseur = {local: truewhenequalto {x: statique local: viewmodelclass.filter1}}}" code >. Bien sûr, "naturellement" est un terme relatif; Xaml ressemble toujours à un gibberish à l'ininitiataire; ^)
J'ai rencontré le même bug sur une machine avec .NET 4.6 installé. Dès que j'ai mis à jour sur le .NET 4.7 (Developer Pack), cette erreur disparaît sans aucun changement de code. P>