9
votes

Erreur lors de la liaison avec les extensions de balisage: Propriété inconnue rencontrée lors de l'analyse d'une extension de balisage

En principe, j'ai développé un moyen net de lier des radiobuttons à presque tout: xxx pré>

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}'}}"/>


0 commentaires

3 Réponses :


9
votes

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é.


1 commentaires

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 à) {à = à; } puis appelez le convertisseur avec converter = {local: truewhenequal {x: statique local: vueModelclass.filter1}}}



6
votes

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}}" />


2 commentaires

Clunky, mais ça marche. Eh bien, il ne travaille pas , mais cela compile (je soupçonne que le prochain problème est dans mon cadre MVVM, UpdateControls).


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 qui lit plus naturellement: ischecked = "{filtre de liaison, convertisseur = {local: truewhenequalto {x: statique local: viewmodelclass.filter1}}}" . Bien sûr, "naturellement" est un terme relatif; Xaml ressemble toujours à un gibberish à l'ininitiataire; ^)



0
votes

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.


0 commentaires