C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WPF コマンドBindingについて


(過去ログ 135 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■79598 / inTopicNo.1)  WPF コマンドBindingについて
  
□投稿者/ coco (3回)-(2016/04/18(Mon) 23:08:50)

分類:[.NET 全般] 

  Frameworkを3.5から4.6へと移行中です。
   そこでBlendのSystem.Windows.Interactivit.dllも4.5へと更新したのですが
  コマンドバインドについて質問させてください。
 
   下記コードのXMALの場合に@で動くことを想定していたのですが、NullReferenceExceptionが発生しました。
  原因をトレースしたのですが、つかみきれませんでした。
    問題点がお分かりになる方がおられましたら、ご回答いただけませんでしょうか?
  宜しくお願いします。


    ==== XAML ===
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:cmd="Commandへの参照" 
  <TextBox>
      <i:Interaction.Triggers>
        <i:EventName="TextChanged">
          <i:InvokeCommandAction Command="{Binding AbcCommand}" CommandParameter="param" />  @ NullReferenceExceptionが発生
          <cmd:EventToCommand Command="{Binding AbcCommand}" CommandParameter="param" />   A コマンドが実行される
        </i:EventTrigger>
      </i:Interaction.Triggers>
    </TextBox>

    ==== Command ===
    public class OriginCommand : TriggerAction<FrameworkElement>
    {
        #region 依存プロパティ
        public static readonly DependencyProperty CommandProperty =
            DependencyProperty.Register("Command", typeof(ICommand), typeof(OriginCommand ), new UIPropertyMetadata(null));
        /// <summary>
        /// コマンド
        /// </summary>
        public ICommand Command
        {
            get { return (ICommand)GetValue(CommandProperty); }
            set { SetValue(CommandProperty, value); }
        }

        public static readonly DependencyProperty CommandParameterProperty =
            DependencyProperty.Register("CommandParameter", typeof(object), typeof(OriginCommand ), new UIPropertyMetadata(null));
        /// <summary>
        /// コマンドパラメータ
        /// </summary>
        public object CommandParameter
        {
            get { return (object)GetValue(CommandParameterProperty); }
            set { SetValue(CommandParameterProperty, value); }
        }
        #endregion

        protected override void Invoke(object parameter)
        {
            if (Command == null) return;
            if (Command is RoutedCommand)
            {
                var rc = Command as RoutedCommand;
                if (rc.CanExecute(CommandParameter, base.AssociatedObject))
                {
                    rc.Execute(CommandParameter, base.AssociatedObject);
                }
            }
            else
            {
                if (Command.CanExecute(CommandParameter))
                    Command.Execute(CommandParameter);
            }
        }
    }

    === ViewModel ===
    public OriginViewModel : ViewModelBase
    {
        private ICommand _abcCommand;
        /// <summary>
        /// コマンド
        /// </summary>
        public ICommand AbcCommand
        {
            get
            {
                return this._abcCommand
                        ?? (this._abcCommand= new RelayCommand<object>(param => AbcFunc(param)));
            }
        }
    }
 



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -