次の方法で共有


VisibilityのBindingが効かない原因

質問

2018年8月15日水曜日 0:44

xamlで、localのファイルを呼び出しているのですが、

そのファイルのVisiblityのbindが上手くいきません。

Flgには、bool値が入っていることは確認済みです。

どのような方法があるのか教えていただけますでしょうか。

■xaml側

<local:Item Grid.Row="0"  Grid.Column="0" DataContext="{Binding ItemList }"  Visibility="{Binding Flg, Converter={StaticResource BooleanToCollapsedConverter}}"/>

■Converter

class BooleanToCollapsedConverter : IValueConverter
    {
        /// <summary>
        /// Convert
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            try
            {
                if (value != null && value != DependencyProperty.UnsetValue)
                {
                    bool? val = value as bool?;

                    if (val.HasValue)
                    {
                        return val.Value ? Visibility.Visible : Visibility.Collapsed;
                    }
                }
                return Visibility.Visible;
            }
            catch
            {
                return Visibility.Visible;
            }
        }

        /// <summary>
        /// ConvertBack
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }

すべての返信 (3)

2018年8月15日水曜日 1:23 ✅回答済み | 1 票

とりあえず、Convertのif (val.HasValue)あたりにブレークポイント張った時にブレークするかどうか確認するとか。

VとVMの構造が分からないと何とも言えませんが、

  • local:ItemにバインディングされているVMオブジェクトにはItemListプロパティが存在している
  • ItemListプロパティの型は、Flgプロパティを持っている

という構造になっていますか?


2018年8月15日水曜日 2:52

うまくバインドできていない場合、Visual Studioの出力ウインドウにエラーが表示されていると思うですが、何と表示されているのでしょうか?

★良い回答には質問者は回答済みマークを、閲覧者は投票を!


2018年8月15日水曜日 5:42 | 1 票

そもそもになってしまうのですが、ItemListがnullの時に効いていなかっただけでした。

nullの時は、勝手にfalseが来るだろうと思い込んでいたので、そこが原因でした。

ありがとうございました。