Laden...

IValueConverter per Code Behind ?

Erstellt von arcardia vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.979 Views
A
arcardia Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren
IValueConverter per Code Behind ?

Mal wieder ne Fräge stellen... 😁

Kann ich einen IValueConverter auch als
Klasse z.b in der Window1 erzeugen und diese Klasse
später fürs Binding übergeben anstatt diese über StaticResource im XAML zu verdrahten ?

Der Hintergrund ist:
Ich wollte einen IValueConverter quasi als Sprachlieferant missbrauchen
müsste aber im nachhinein bestimmte Eigenschaften / Methoden aufrufen können

Warum,Wieso,Weshalb Beispiel:
<Label Content="{Binding Converter={StaticResource Translator}, ConverterParameter='MainLabel@Open'}"/>

Ich zerlege im IValueConverter den ConverterParameter in 2 Bestandteile
einmal in 'MainLabel' und einmal in 'Open' (Sind ja durchs @ getrennt).
Jetzt wird ein 2dim Array durchgegangen und geguckt ob es einen Eintrag gibt dessen erster Wert 'MainLabel' heisst , wenn ja wird der zweite Wert des Arrays als Antwort zurückgegeben. Kann er keinen Eintrag finden so wird stattdessen 'Open' zurückgegeben (Quasi als Notfallantwort)

Jetzt müsste ich aber die Möglichkeit haben besagtes Array im Code-Behind bearbeiten zu können. Nur ich weiss derzeit nicht wie ich an den IValueConverter herankomme....

Alternativ: Gibt es evtl. eine elegantere Methode als einen IValueConverter zu missbrauchen ?
🤔

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo Arcadia,

da es bei dir ja nur darum geht einen Text an das Label zu binden, finde ich den ValueConverter etwas übertrieben (mit Kanonen auf Spatzen geschossen 🙂)

Ich würde einfach ein Property an das Label binden, welches auch von deiner Klasse zugänglich ist, die ganze Verarbeitung der Daten kannst du intern in deiner Klasse machen.

Gruss
Michael

A
arcardia Themenstarter:in
11 Beiträge seit 2008
vor 15 Jahren

Naja ich muss meiner Translator Klasse (derzeit ja der IValueConverter) irgendwie mitteilen welchen String er für welches Element raussuchen soll...und das mache ich über den ConverterParameter. Es ist ja später nicht nur ein Label mit wechselnder Beschriftung sondern quasi jedes Control.

Besteht den über ein einfachens Binding die Möglichkeit zusätzliche Parameter anzugeben ?

582 Beiträge seit 2008
vor 15 Jahren

Hier findest du ein Value Converter von mir


public class DoubleToIntegerConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (int)(double)value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int result = 0;
            if (int.TryParse((string)value, out result))
                return result;
            else return 0;
        }
    }

Da im Standart-Konstrukter man Parameter übergeben kann, beantworte ich das mal pauschal mit ja. Aber wie man das macht, kann ich dir nicht sagen, da ich das bisher nicht benötigt habe. Wäre aber nett, wenn du deine Erkenntnisse hier später publizieren würdest 🙂

Gruß dat Tala