Question

J'ai besoin d'avoir un gestionnaire de commandes pour un togglebutton qui peut prendre plusieurs paramètres, à savoir la propriété ischecée de ladite toglebutton, ainsi qu'une valeur constante, qui pourrait être une chaîne, un octet, int ... n'a pas d'importance.

j'ai trouvé Cette excellente question sur SO et a suivi le lien de la réponse et lu sur le multibinding et iMultivalUeConverter. Ça s'est vraiment bien passé jusqu'à ce que je devais écrire le multiclier, quand j'ai réalisé que je dois aussi passer une valeur constante et ne pouvait pas faire quelque chose comme

<Binding Value="1" />

J'en ai ensuite rencontré un autre Question similaire à laquelle Kent Boogaart a répondu, puis j'ai commencé à réfléchir aux façons de contourner cela.

Une façon possible consiste à ne pas utiliser MVVM et à ajouter simplement la propriété TAG à mon Togglebutton, auquel cas ma multibinding ressemblerait à ceci:

<MultiBinding Converter="{StaticResource MyConverter}">
    <MultiBinding.Bindings>
        <Binding Path="IsChecked" />
        <Binding Path="Tag" />
    </MultiBinding.Bindings>
</MultiBinding>

Kent avait fait un commentaire dans le sens de "Si vous utilisez MVVM, vous devriez pouvoir contourner ce problème". Cependant, je ne suis pas sûr que ce soit une option pour moi, même si j'ai adopté MVVM comme modèle WPF de nécessité choix.

La raison pour laquelle je dis cela est que j'ai plus d'un Togglebutton dans le UserControl, et chacune des commandes des ToggleButtons doit appeler la même fonction. Mais comme ils sont Togglebuttons, je ne peux pas utiliser la propriété liée à Ischecd dans le ViewModel, car je ne sais pas lequel a été cliqué pour la dernière fois. Je suppose que je pourrais ajouter une autre propriété privée pour garder une trace de cela, mais cela semble un peu idiot. En ce qui concerne la constante, je pourrais probablement me débarrasser de cela si je faisais l'idée de suivi, mais je ne suis pas sûr de toute autre façon de le contourner.

Quelqu'un a-t-il de bonnes suggestions pour moi ici? :)

ÉDITER - OK, j'ai donc besoin de mettre à jour mes liaisons, ce qui ne fonctionne toujours pas très bien:

    <ToggleButton Tag="1" Command="{Binding MyCommand}" Style="{StaticResource PassFailToggleButtonStyle}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
        <ToggleButton.CommandParameter>
            <MultiBinding Converter="{StaticResource MyConverter}">
                <MultiBinding.Bindings>
                    <Binding Path="IsChecked" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding.Bindings>
            </MultiBinding>
        </ToggleButton.CommandParameter>
    </ToggleButton>

Ischecked fonctionnait, mais pas le tag. Je viens de réaliser que la balise est une chaîne ... duh. Ça marche maintenant! La clé était d'utiliser une source de votre Soi.

Était-ce utile?

La solution

Comme expliqué ci-dessus, je l'ai compris. Je devais utiliser Self pour RelativeSource Et cela a fait l'affaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top