Frage

Ich möchte hinzufügen, einen Konstanten Wert auf eine eingehende gebunden integer.In der Tat habe ich mehrere Orte, wo ich will, zu binden, um die gleiche Quelle Wert, aber fügen Sie verschiedene Konstanten.Also die ideale Lösung wäre so etwas wie dieses...

<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=5}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=8}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=24}"/>

(HINWEIS:Dies ist ein Beispiel, um zu zeigen, die Idee, meinen tatsächlichen verbindliches Szenario ist nicht auf die canvas-Eigenschaft einer TextBox.Aber es zeigt die Idee, die mehr klar)

Im moment ist die einzige Lösung, die ich denken kann, ist, setzen Sie viele verschiedene source-Eigenschaften, von denen jede fügt auf eine andere Konstante, um den gleichen inneren Wert.So, ich könnte so etwas tun...

<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus5}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus8}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus24}"/>

Aber das ist ziemlich düster, weil ich in Zukunft brauchen könnten, um das hinzufügen neue Eigenschaften für neue Konstanten.Auch wenn ich ändern müssen die Wert-Hinzugefügt, ich muss gehen, eine alter der Quell-Objekt, das ist ziemlich naff.

Es muss eine allgemeinere Art und Weise als diese?Alle WPF-Experten irgendwelche Ideen?

War es hilfreich?

Lösung

Ich glaube, Sie können dies tun, mit einem Wert Konverter.Hier ist eine blog-Eintrag dass die Adressen übergabe eines Parameters auf den Wert Konverter in xaml.Und dieser blog gibt einige details der Implementierung einen Wert Konverter.

Andere Tipps

Ich benutze eine MathConverterdass ich erstellt, alles zu tun einfache arithmatic Operationen mit.Der code für Konverter hier und es kann verwendet werden, wie diese:

<TextBox Canvas.Top="{Binding SomeValue, 
             Converter={StaticResource MathConverter},
             ConverterParameter=@VALUE+5}" />

Sie können auch verwenden Sie es mit fortgeschrittenen arithmatic Operationen wie

Width="{Binding ElementName=RootWindow, Path=ActualWidth,
                Converter={StaticResource MathConverter},
                ConverterParameter=((@VALUE-200)*.3)}"

Mit einem Wert converter ist eine gute Lösung für das problem als es ermöglicht Sie zu ändern die Quelle Wert, wie es gebunden wird, um die Benutzeroberfläche.

Ich habe die folgenden in ein paar Plätze.

public class AddValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        object result = value;
        int parameterValue;

        if (value != null && targetType == typeof(Int32) && 
            int.TryParse((string)parameter, 
            NumberStyles.Integer, culture, out parameterValue))
        {
            result = (int)value + (int)parameterValue;
        }

        return result;
    }

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

Beispiel

 <Setter Property="Grid.ColumnSpan"
         Value="{Binding 
                   Path=ColumnDefinitions.Count,
                   RelativeSource={RelativeSource AncestorType=Grid},
                   Converter={StaticResource addValueConverter},
                   ConverterParameter=1}"
  />

Ich habe noch nie verwendet, WPF, aber ich habe eine mögliche Lösung.

Können Sie Ihre verbindliche Pfad anzeigen, um eine Karte?Wenn dem so ist, sollte dann in der Lage sein, um ein argument (den Schlüssel).Brauchen Sie eine Klasse erstellen, die implementiert die Map-Schnittstelle, aber wirklich nur gibt die Basis-Wert, den Sie initialisiert die "Karte" mit dem Schlüssel angehängt.

public Integer get( Integer key ) { return baseInt + key; }  // or some such

Ohne eine gewisse Fähigkeit zu pass die Zahl von den tag, ich kann nicht sehen wie du gehst, um es zu zurück, andere deltas vom ursprünglichen Wert.

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