Frage

Ich muss einen Befehlshandler für ein ToggleButton haben, der mehrere Parameter annehmen kann, nämlich die isumchierte Eigenschaft des genannten ToggleButton, zusammen mit einem konstanten Wert, der eine Zeichenfolge sein könnte, Byte, int ... egal.

ich fand Diese tolle Frage zu so und folgte dem Link der Antwort und lesen Sie Multibinding und IMultivalueconverter. Es verlief wirklich reibungslos, bis ich das Multibinding schreiben musste, als mir klar wurde

<Binding Value="1" />

Ich bin dann auf einen anderen gestoßen Ähnliche Frage, die Kent Boogaart beantwortete, Und dann begann ich darüber nachzudenken, wie ich das umgehen konnte.

Eine mögliche Möglichkeit besteht darin, MVVM nicht zu verwenden und die Tag -Eigenschaft einfach zu meinem ToggleButton hinzuzufügen. In diesem Fall würde mein Multibinding so aussehen:

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

Kent hatte einen Kommentar in der Sicht von "Wenn Sie MVVM verwenden, sollten Sie in der Lage sein, dieses Problem zu umgehen." Ich bin mir jedoch nicht sicher, ob das eine Option für mich ist, obwohl ich MVVM als mein WPF -Muster von übernommen habe Notwendigkeit Auswahl.

Der Grund, warum ich dies sage, ist, dass ich mehr als ein ToggleButton im Usercontrol habe und jeder der Befehle der ToggleButtons dieselbe Funktion aufrufen muss. Da es sich jedoch um ToggleButtons handelt, kann ich die Eigenschaft, die in das ViewModel gebunden ist, nicht verwenden, da ich nicht weiß, welches zuletzt geklickt wurde. Ich nehme an, ich könnte ein weiteres Privateigentum hinzufügen, um dies im Auge zu behalten, aber es scheint ein wenig albern. Was die Konstante betrifft, könnte ich dies wahrscheinlich loswerden, wenn ich die Tracking -Idee machte, aber nicht sicher ist, wie man sie umgeht.

Hat jemand hier gute Vorschläge für mich? :)

BEARBEITEN - OK, also muss ich meine Bindungen aktualisieren, die immer noch nicht ganz richtig funktionieren:

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

Isschecked arbeitete, aber nicht markiert. Ich habe gerade festgestellt, dass Tag eine Zeichenfolge ist ... duh. Es funktioniert jetzt! Der Schlüssel bestand darin, eine Verwandte zu verwenden Selbst.

War es hilfreich?

Lösung

Wie oben erläutert, habe ich es herausgefunden. Ich musste benutzen Self zum RelativeSource Und das hat den Trick gemacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top