none
Multibinding ConvertBack RRS feed

  • Frage

  • Hallo!

    Ich habe einen Konverter mit Multibinding:

    <Border Name="brd">
        <Border.Style>
            <Style TargetType="Border">
                <Setter Property="Background" >
                    <Setter.Value>
                        <MultiBinding Converter="{StaticResource ResourceKey=BooleanToBrush}" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
                            <Binding Path="IsChecked" ElementName="cbolZustand" />
                            <Binding Path="Background" ElementName="brdTrue" />
                            <Binding Path="Background" ElementName="brdFalse"/>
                            <Binding Path="Background" ElementName="brdNull"/>
                        </MultiBinding>
                    </Setter.Value>
                </Setter>
            </Style>
        </Border.Style>
    </Border>

    Die Convert-Methode läßt sich ohne Probleme Debuggen.

    Wie erzeuge ich aber einen ConvertBack Aufruf???

    Wenn ich die Background-Eigenschaft des durch Multibinding und Konverter gebundenen Borders (brd) ändere, wird das Binding zerstört. Wenn ich aber nur eine Source eines Bindings ändere, wird die ConvertBack-Methode auch nicht ausgelöst.

    Wie kann ich denn einen ConverBack-Aufruf erzwingen?



    • Bearbeitet perlfred Mittwoch, 8. Juni 2016 10:55
    Mittwoch, 8. Juni 2016 10:48

Antworten

Alle Antworten

  • Hallo,

    wenn es dir nur ums Testen deines Codes geht, dann kannst du auch einfach die ConvertBack-Methode im C#-Code aufrufen. Auch bei UnitTests würde ich das so machen.

    Um ConvertBack im XAML aufzurufen musst du irgendwie den gebundenen Eigenschaftswert (Background) ändern. Bei Background gestaltet sich das schwierig, davon abgesehen dass mir auch kein Grund einfällt warum ich etwas von eine Füllfarbe abhängig machen sollte.
    Möglich wäre aber eine OneWayToSource Bindung auf die Background-Eigenschaft. So kannst du den Eigenschaftswert mit Hilfe eines 2. Bindings ändern ohne aber das eigentliche Binding zu zerstören.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert perlfred Donnerstag, 9. Juni 2016 14:16
    Mittwoch, 8. Juni 2016 12:58
    Moderator
  • Hallo Tom!

    Ich werde es mal mit der Zweiten OneWayToSource Bindung probieren. Komme allerdings Heute nicht mehr dazu.

    Danke für deine Antwort!

    Fred.

    Mittwoch, 8. Juni 2016 14:26
  • Hallo Tom!

    Prima! Wenn ich von dem zweiten Border die Farbe programmtechnisch ändere, wird durch das OneWayToSource Binding das Binding des zweiten Border nicht zerstört! Die ConvertBack-Methode wird aufgerufen!!!

    <Border x:Name="brd2" Background="{Binding ElementName=brd, Path=Background, Mode=OneWayToSource}" />
           

    Klasse "Trick" mit den zwei Binding's!!!!

    Allerdings sehe ich jetzt, dass ein Back bei Multibinding wenig Sinn macht, da ich von dem Ergebnis nur unsicher (durch die Parameter) auf die Ausgangswerte schließen kann.

    Trotzdem hat mir deine Lösung Wege aufgezeigt, wie man (die Ergebnisse von) Bindings ändern kann, ohne sie zu zerstören!

    Vielen Dank!

    Fred.

    Donnerstag, 9. Juni 2016 14:51