none
VisibilityのBindingが効かない原因 RRS feed

  • 質問

  • 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();
            }
        }


    • 編集済み hisai 2018年8月15日 0:45
    2018年8月15日 0:44

回答

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

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

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

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

    • 回答としてマーク hisai 2018年8月15日 5:42
    2018年8月15日 1:23

すべての返信

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

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

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

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

    • 回答としてマーク hisai 2018年8月15日 5:42
    2018年8月15日 1:23
  • うまくバインドできていない場合、Visual Studioの出力ウインドウにエラーが表示されていると思うですが、何と表示されているのでしょうか?


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

    2018年8月15日 2:52
    モデレータ
  • そもそもになってしまうのですが、ItemListがnullの時に効いていなかっただけでした。

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

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

    2018年8月15日 5:42