Frage

Ich gründe eine IsEnabled Eigenschaft einer Steuerung basierend auf, ob ein SelectedIndex> = 0 in einer List-Box. Ich kann dies tun in der Code-behind, aber ich wollte einen Wert Konverter für dieses Verhalten schaffen, da es etwas, das ich häufig tun ist.

Ich habe dieses Value Converter die Aufgabe zu handhaben und band es an die IsEnabled Eigenschaft:

    [ValueConversion(typeof(Selector), typeof(bool))]
public class SelectorItemSelectedToBooleanConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null || !(value is Selector))
            return null;

        var control = value as Selector;
        return control.SelectedIndex >= 0;
    }

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

    #endregion
}

Der Konverter wird nur einmal aufgerufen, wenn die Anwendung geladen wird. Es wird nicht ausgelöst, wenn die SelectedIndex Änderungen.

Meine Frage ist also, was bewirkt, dass ein Value Converter abzufeuern? Ich nehme an, es ist, wenn die gebundenen Datenänderungen, so ist es eine Möglichkeit, den Konverter zu zwingen, in anderen Umständen zu feuern? Bin ich auch die richtige Frage zu stellen?

War es hilfreich?

Lösung

Es wird nicht ausgelöst, weil Sie es an die Selector gebunden haben selbst, nicht die SelectedIndex Eigenschaft des Selector. WPF wird jede Eigenschaft in dem Pfad, den Sie binden an und aktualisieren Werte, wenn eine dieser Eigenschaften Änderungen überwachen. Die Selector ändert sich nicht, die SelectedIndex ist.

Andere Tipps

Ich denke, ein Konverter könnte der falsche Weg, dies zu gehen über. Eine bessere Lösung wäre ein RoutedCommand zu verwenden, und der Befehl des CanExecuted Methode überprüft, ob Ihre SelectedIndex größer oder gleich 0

So viel gesagt, wenn Sie immer noch Ihre Werteumwandler verwenden möchten, sollten Sie wissen, dass der Konverter ausgelöst wird, wenn die Bindungsquelle Updates. Sie können das Verhalten des Updates ändern Sie die Update Eigenschaft auf der Bindung. Standardmäßig ist diese Option auf Property , aber für Textboxen es wird auf Lost-Focus (sobald die Textbox den Fokus verliert die Bindung wird aktualisiert).

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