2017-02-03 8 views
0

ListViewアイテムのBindingContextの値に応じてボタンを表示/非表示にしたいので、BindingContextをブール値に変換するためにValueConverterを作成しました。何らかの理由でそれが機能していないし、値が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にあるようには思われません。 https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/#Bindings_and_Collections

:今後の参考のために

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

:ページのリソースディクショナリにNulltoBoolConverterを置くことによって、あなたのXAMLを変更してみてください

関連する問題