none
添付プロパティがnullになってしまう RRS feed

  • 質問

  • ビヘイビアの添付プロパティを利用してViewModelの情報を取得しようとしているのですが、nullとなってしまいます。

    具体的には、Main画面の閉じるボタンを押下した際にログイン情報を取得したいのですが、LoginInfoがnullとなります。

    ■MainView.xaml

        <i:Interaction.Behaviors>
            <behavior:CloseWindowBehavior LoginInfo = "{Binding LoginViewModel}"/>
        </i:Interaction.Behaviors>

    ■CloseWindowBehavior.cs

     /// <summary>
     /// LoginInfo添付プロパティ
     /// </summary>
     public static readonly DependencyProperty LoginInfoProperty =
     DependencyProperty.Register("LoginInfo", typeof(LoginViewModel),
     typeof(CloseWindowBehavior),
     new FrameworkPropertyMetadata(null));
    
     /// <summary>
     /// ログイン情報
     /// </summary>
     public LoginViewModel LoginInfo
     {
           get { return (LoginViewModel)GetValue(LoginInfoProperty); }
           set { SetValue(LoginInfoProperty, value); }
      }

    2020年7月28日 2:31

回答

  • 再現しないですね。

    set { SetValue(LoginInfoProperty, value); }

    の箇所にブレークポイントを設定しておいてブレークするか確かめたらどうなります?
    全くブレークしないならバインディングがそもそもできてない可能性が高いです。
    たぶんビヘイビアを登録した対象のDataContextがnullか、LoginInfoへのバインディングのパスが間違ってるのどちらかだと思われます。

    #DependencyProperty.Registerで登録したのは添付プロパティではなく通常の依存関係プロパティです


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Rito00279 2020年7月29日 1:00
    2020年7月28日 10:11

すべての返信

  • 再現しないですね。

    set { SetValue(LoginInfoProperty, value); }

    の箇所にブレークポイントを設定しておいてブレークするか確かめたらどうなります?
    全くブレークしないならバインディングがそもそもできてない可能性が高いです。
    たぶんビヘイビアを登録した対象のDataContextがnullか、LoginInfoへのバインディングのパスが間違ってるのどちらかだと思われます。

    #DependencyProperty.Registerで登録したのは添付プロパティではなく通常の依存関係プロパティです


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Rito00279 2020年7月29日 1:00
    2020年7月28日 10:11
  • 確認したところ、単純ミスでした。バインディングしているLoginViewModelをnewしておらず、nullの状態でした。

    処理を追加したところ、正常に動作しました。ご回答頂きありがとうございました。

    2020年7月29日 1:30