2017-02-03 1 views
0

Я хочу показать/скрыть кнопку в зависимости от значения BindingContext элемента ListView, поэтому я сделал ValueConverter для преобразования BindingContext в логическое значение. По какой-то причине он не работает, и кнопка всегда отображается, даже когда значение равно null.Xamarin Button IsVisible Связывание с ValueConverter не работает

EDIT: Когда инициализация преобразователя возвращает правильное значение, true/false, но IsVisible не установлен, кажется. При изменении элемента привязка привязана к методу Convert, не вызвана снова, это также кажется странным для меня, поскольку я хочу, чтобы он обновлялся всякий раз, когда объект, к которому он привязан, изменил значение.

Вот преобразователь:

public class NullToBoolConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value != null ? true : false; 
    } 

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

А вот как я использую его в XAML:

<converters:NullToBoolConverter x:Key="objectToBool" /> 
<DataTemplate x:Key="MyItemTemplate"> 
      <ViewCell> 
       <Grid ColumnSpacing="10"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 

        <controls:ImageButton Grid.Column="0" 
              IsVisible="{Binding Path=., Converter={StaticResource objectToBool}}" 
              VerticalOptions="Start" HorizontalOptions="Center" 
              Image="ic_remove_circle_outline_black_24dp" 
              BackgroundColor="Transparent" /> 

       </Grid> 
      </ViewCell> 
     </DataTemplate> 

И сам списке следует за то, что он стоит

<ListView ItemsSource="{Binding MyItems}" 
        ItemTemplate="{StaticResource MyItemTemplate}" 
        RowHeight="50" 
        HeightRequest="155" 
        VerticalOptions="Start" 
        BackgroundColor="#209FAA9F"/> 

ответ

2

С код, который вы указали, не похоже, что ваш конвертер значений находится в ResourceDictionary. Попробуйте изменить свой XAML, поставив NulltoBoolConverter в страницы словаря ресурсов:

<ContentPage.Resources> 
    <ResourceDictionary> 
     <converters:NullToBoolConverter x:Key="objectToBool" /> 
    </ResourceDictionary> 
</ContentPage.Resources> 

Для дальнейшего использования: https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/#Bindings_and_Collections