2016-05-10 1 views
0

Я использую BooleanToVisibilityConvertor для управления видимостью TextBlock в ListBox DataTemplate.Могу ли я объявить несколько конвертеров? WP8

Вот мой XAML код:

<phone:PhoneApplicationPage.Resources> 
    <Converters:BooleanToVisibilityConvertor x:Key="booleanToVisibilityConvertor"/> 
    </phone:PhoneApplicationPage.Resources> 

    <TextBlock Grid.Row="2" HorizontalAlignment="Right" Padding="0,0,7,0" Visibility="{Binding AverageConsumption, Converter={StaticResource booleanToVisibilityConvertor}}"> 
    <Run Text="{Binding AverageConsumption}"/> 
    <Run Text="l./100 km."/> 
    </TextBlock> 

И код позади:

public class BooleanToVisibilityConvertor : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     { 
      if (value != null) 
      { 
       if (!string.IsNullOrEmpty(value.ToString())) 
       { 
        return Visibility.Visible; 
       } 

      } 
      return Visibility.Collapsed; 
     } 
    } 

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

Это работает правильно, но мне нужно еще один (обращенный) конвертер для другого TextBlock помещенного на том же position (Grid.Row = "2" HorizontalAlignment = "Right") со статическим текстом = «Частичная перезагрузка», поэтому, когда {Binding AverageConsumption} не является нулевым или пустым, сначала будет разрешен TextBlock, а второй будет свернут и наоборот. Что-то вроде этого:

class BooleanToVisibilityConvertorReversed : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     { 
      if (value != null) 
      { 
       if (!string.IsNullOrEmpty(value.ToString())) 
       { 
        return Visibility.Collapsed; 
       } 
      } 
      return Visibility.Visible; 
     } 
    } 

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

Я попытался объявить другой конвертер в XAML:

<phone:PhoneApplicationPage.Resources> 
    <Converters:BooleanToVisibilityConvertor x:Key="booleanToVisibilityConvertor"/> 
    <Converters:BooleanToVisibilityConvertorReversed x:Key="booleanToVisibilityConvertorReversed"/> 
    </phone:PhoneApplicationPage.Resources> 

Но есть исключение на InitializeComponent(): 'Первый шанс исключение типа' System.Windows. Markup.XamlParseException 'произошел в System.Windows.ni.dll' Как я могу это решить?

+0

Почему, по вашему мнению, эта линия является преступником? – ixSci

+0

Я думаю, что причина здесь: <Преобразователи: BooleanToVisibilityConvertorReversed x: Key = "booleanToVisibilityConvertorReversed" />, и он просто не может инициализировать страницу. Я удалил другой конвертер и попробовал только с этим, но все равно имею то же исключение. –

+0

И если вы удалите его, ошибка исчезнет? Может быть, есть какой-то скрытый символ? Попробуйте ввести его заново с помощью справки IntelliSense. – ixSci

ответ

0

Похоже, что я нашел в чем проблема. Ваш класс BooleanToVisibilityConvertorReversed не является общедоступным. Сделайте это общедоступным, и ваши проблемы исчезнут.

+0

Мы почти перешли наши ответы ха-ха. Я просто нашел то же самое, и теперь он работает. В любом случае, спасибо! Вы были первыми, поэтому я пометю вам ответ :) –