2 Stimmen

WPF - Dynamischer Wert in ConverterParameter

Haben Sie eine Situation, in der Kontrollkästchen in einer Benutzeroberfläche an einen numerischen Parameter gebunden werden müssen - effektiv machen bestimmte Werte das Kontrollkästchen "true", sonst ist es "false".

Der einfachste Weg, dies zu tun, schien die Verwendung eines Konverters zu sein:

[ValueConversion(typeof(int), typeof(bool?))]
public class TypeToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool?))
            throw new InvalidOperationException("The target must be a bool");

        if( (value < 3)
        {
            return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplmentedExpection();
    }
}

Und dann im XAML:

Das funktioniert wie ein Zauber, wenn Convert verwendet wird, scheitert jedoch vollständig, wenn ConvertBack verwendet wird, weil es wissen muss, welcher numerische Wert war (es hängt von anderen Benutzeroberflächenelementen ab), bevor es wissen kann, welche Zahl zurückgegeben werden soll - effektiv benötigt es Zugriff auf das gebundene Objekt.

Ich ging davon aus, dass ich dies mit einem ConverterParameter tun könnte, aber anscheinend können Sie keinen Wert an diese Eigenschaft binden.

Gibt es einen Ausweg aus diesem Chaos?

EDIT: Ich habe das durch Herumspielen mit den ursprünglichen Bindungen gelöst und bin damit davongekommen, weil ich ohnehin alle Elemente löschen wollte, wenn sie nicht ausgewählt sind. Aber ich lasse dies hier stehen, da es ein gültiges Problem zu sein scheint und ich neugierig auf mögliche Lösungen bin.

7voto

therewillbesnacks Punkte 1015

Warum bindest du nicht einfach an etwas und erledigst die Arbeit in dem, an dem du bindest, zum Beispiel einem ViewModel? Es wird wahrscheinlich sauberer und schneller sein.

Converter sind theoretisch schön, aber nach dem Bau vieler großer WPF-Projekte verwende ich sie fast nie aus Gründen wie oben. Klar, du kannst es dazu bringen, das zu tun, was du willst, aber was ist der Sinn? Du hast viel weniger Kontrolle darüber, wie und wann diese Konvertierungen stattfinden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X