IValueCOnverter не работает - PullRequest
       34

IValueCOnverter не работает

3 голосов
/ 11 февраля 2010

Я часами гуглял эту проблему и не мог понять, в чем дело.

У меня есть следующий конвертер, который просто возвращает Brushes.Red (также пробовал Colors.Red), но все равно не повезло.

public class ColorConverter : IValueConverter
{
    private static ColorConverter instance = new ColorConverter();
    public static ColorConverter Instance
    {
        get
        {
            return instance;
        }
    }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Brushes.Red;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

Теперь у меня в xaml есть следующий код:

<StackPanel Orientation="Vertical">
    <TextBlock Text="{Binding Value}" TextAlignment="Center" Foreground="{Binding Path=color, Converter={x:Static local:ColorConverter.Instance}}" Margin="2"/>
</StackPanel>

Я установил следующее пространство имен вверху:

xmlns:local="clr-namespace:Dashboard"

Теперь у меня есть следующий класс, связанный с панелью стека:

public class MyClass : INotifyPropertyChanged
{
    public String Value;
    public Color color;

    // Declare the PropertyChanged event
    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

Привязка данных (Value) работает отлично, но преобразователь не хочет срабатывать, я пытался установить точку останова в методе Convert в covnerter, но это не срабатывает при отладке, это просто если мой отладчик не вызывается.

Может кто-нибудь пролить свет на это?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Я удивлен, что вы говорите, что сама привязка работает, потому что «Значение» и «цвет» являются полями, а привязка к полям не должна работать.

1 голос
/ 11 февраля 2010

Ну, вот как я это сделал в своем проекте. Я изменил свой код, чтобы отразить то, что вы пытаетесь сделать. Я надеюсь, что это помогает. Я не могу ответить, почему ваш синглтон-подход не сработает.

Класс:

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Brushes.Red;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

В моем элементе UserControl.Resources:

<UserControl.Resources>
    <local:ColorConverter x:Key="MyColorConverter" />
</UserControl.Resources>

Элемент StackPanel:

<StackPanel Orientation="Vertical">
    <TextBlock Text="{Binding Value}" TextAlignment="Center" Foreground="{Binding Path=color, Converter={StaticResource MyColorConverter}}" Margin="2"/>
</StackPanel>

Кроме того, проверяли ли вы в окне «Вывод» ошибки? Вам также следует прочитать статью Bea Stollnitz об отладке привязок данных . На самом деле у нее есть специальный раздел о IValueConverters, который может пригодиться вам когда-нибудь.

...