Конвертер не вызывается - PullRequest
0 голосов
/ 08 ноября 2018

Я объявил конвертер в xaml:

<local:StringToWidthConverter x:Key="Converter" />

и

<GridViewColumn Header="Monitor 4"
                Width="{Binding Monitor4, Converter={StaticResource Converter}, ConverterParameter=Auto}">

Класс преобразователя определяется как:

public class StringToWidthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (string)value == null ? 0.0 : parameter;
    }

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

Определение Monitor4:

public string Monitor4
{
    get { return monitor4; }
    set
    {
        monitor4 = value;
        OnPropertyChanged("Monitor4");
    }
}

а преобразователь никогда не вызывается? любое предложение было бы здорово. Заранее спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Единственная причина, о которой я могу подумать, это то, что вы забыли установить DataContext, так что нет никакого источника для связывания вообще.

this.DataContext = The_View_Model; 

Если DataContext установлен правильно, как вы узнаете, что конвертер не выполняется? Установите точку останова в методе Convert, достигнута точка останова или нет?

Если вы правильно установили DataContext и некоторая привязка не работает, посмотрите в окне «Вывод», должна быть некоторая ошибка привязки - в отличие от необработанных исключений, VS просто регистрирует ошибки привязки без вывода сообщений, не завершая работу приложения.

Например, если вы связываете свойство Monitor4, которое оказывается несуществующим:

System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство 'Monitor4' не найдено в 'object' '' ConverterWindow '(Name =' ')'. BindingExpression: Path = Monitor4; DataItem = 'ConverterWindow' (Name = ''); целевым элементом является 'Grid' (Name = ''); Целевое свойство - «Ширина» (тип «Двойной»)

Если преобразователь значений работает неправильно

Ошибка System.Windows.Data: 6: преобразователю «DynamicValueConverter» не удалось преобразовать значение «Авто» (тип «Строка»)

В вашем случае вы не можете преобразовать строковое значение Auto в Double. Вместо этого вы можете вернуть System.Double.NaN.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (string)value == null ? 0.0 : System.Double.NaN; 
}
...