2012-03-29 13 views
0

問題があります。Silverlight:汎用コンポーネントのバインドコマンド

私はアプリケーションで使用する汎用コンテナを作成しました。 このコンテナは、現在は2つのプロパティ(コンテンツとボタンアクション)をエクスポートします。

問題は私がアクションをバインドできないことです。

汎用コンテナがボタンを持っている:私の背後にあるコードで

<HyperlinkButton x:Name="expandButton" Width="16"> 

ICommandのプロパティをエクスポートします。私はそれを使用するためにトライする場合、

public ICommand ExpandCommand 
     { 
      get { return Click.GetCommand(expandButton); } 
      set { Click.SetCommand(expandButton, value); } 
     } 

そして:

<abo:DashBoardPanel Margin="10" Grid.Row="1" Title="Command Panel" 
            DataContext="{Binding Commands}" 
            ExpandCommand="{Binding test}" 
            > 

コンポーネント(ジェネリックコンテナを使用するコンポーネント)に次の例外の発生が割り当てられた場合:

{System.ArgumentExceptionの国連oggettoジTIPO 非PUO ESSERE convertito NEL TIPO 'System.Windows.Data.Binding 'System.Windows.Input.ICommand'。 SU System.RuntimeType.TryChangeType(Object値、バインダーバインダー、 CultureInfoカルチャ、ブールneedsSpecialCast)SU System.RuntimeType.CheckValue(Object値、バインダーバインダー、のCultureInfo 培養、のBindingFlags invokeAttr)SU System.Reflection.MethodBase。 CheckArguments(オブジェクト[]パラメータ、 バインダーバインダー、のBindingFlags invokeAttr、CultureInfoカルチャ、署名 SIG)SU System.Reflection.RuntimeMethodInfo.Invoke(オブジェクトobj、 のBindingFlags invokeAttr、バインダーバインダー、オブジェクト[]パラメータ、 CultureInfoカルチャ、ブールスキップ可能性チェック)su System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、バインダーバインダー、オブジェクト[]パラメーターERS、CultureInfoカルチャ)
SU System.Reflection.RuntimePropertyInfo.SetValue(オブジェクトobj、 値、のBindingFlags invokeAttr、バインダーバインダーオブジェクト、[]のインデックス、 CultureInfoカルチャ)SU System.Reflection.RuntimePropertyInfo.SetValue(対象物OBJオブジェクト、 値オブジェクト、SU MS.Internal.XamlMemberInfo.SetValue(オブジェクトターゲットオブジェクト値)SU MS.Internal.XamlManagedRuntimeRPInvokes.SetValue(XamlTypeToken INTYPE、 XamlQualifiedObject & inObj、XamlPropertyToken inProperty、 XamlQualifiedObject &)[]のインデックスオブジェクトinValue)}

(それはイタリア語です..翻訳は型 『System.Windows.Data.Binding』のオブジェクト」のようなものが 『System.Windows.Input.ICommand』に変換することができない場合)

任意のアイデア?

ありがとうございます。 Francesco

答えて

2

私はExpandCommandがそれにバインドできるようにするには、依存関係のプロパティである必要があると思います。少なくともあなたが示したものから、編集を開始するのが最初です。

ExpandCommandは、あなたの一般的なクラスで次のようになります。

 public static readonly DependencyProperty ExpandCommandProperty = 
     DependencyProperty.Register(
     "ExpandCommand", 
     typeof(ICommand), 
     typeof(genericobject), 
     new PropertyMetadata(OnExpandCommandChanged)); 

    public ICommand ExpandCommand 
    { 
     get 
     { 
      return (ICommand)this.GetValue(ExpandCommandProperty); 
     } 
     set 
     { 
      this.SetValue(ExpandCommandProperty, value); 
     } 
    } 
    private static void OnExpandCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     genericobject picker = (genericobject)d; 
     if (picker == null) 
      return; 

    } 
+0

ありがとうございました。できます!私は依存性プロパティを登録する必要があると思ったのは、UIをモデルで更新したままにしたい場合だけでした – Francesco

関連する問題