2011-06-01 9 views
1

この質問は2,3回聞かれましたが、私のシナリオに対する完全な答えを見つけることはできませんでした。リストボックス項目テンプレート内のボタンからのSilverlight呼び出しコマンド

私のプロジェクトでは、リストボックスアイテムとして作成したユーザーコントロールがあります。このユーザーコントロール内Iボタン

  <Button x:Name="DetailButton" 
       Grid.Column="1" 
       Width="107" 
       Height="23" 
       Margin="196,94,0,0" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Top" 
       Click="MoreDetail_Click" 
       Command="{Binding GetCFSDetailCommand}" 
       Content="View Details [+]" /> 

ボタンを有し、これは基本的に可視の状態に基づいて、グリッドの行を拡張又は崩壊ビューに固有のクリックイベントを有しています。私はここでイベントを使用しました。このボタンには、VM内で呼び出されるコマンドもあります。

VMは

public class SearchViewModel : INotifyPropertyChanged 
{ 
    private DelegateCommand _getCFSDetailCommand; 
public DelegateCommand GetCFSDetailCommand 
    { 
     get 
     { 
      if (this._getCFSDetailCommand == null) 
       this._getCFSDetailCommand = new DelegateCommand(GetCFSDetailCommandExecute, CanGetCFSDetailCommandExecute); 

      return this._getCFSDetailCommand;  
     } 

    } 
private void GetCFSDetailCommandExecute(object parameter) 
    { 
     //bind collection to model call here 
    } 

私が午前問題のコードは、リストボックスの項目内で、私はVMにバインドされたビューを持っている場合、ボタン上のコマンドは、「失われない」または決して呼ばれていると私は、このコマンドを配置する場合ビュー内の他のボタンでは、コマンドが呼び出されます。誰でも私はどのようにリストボックスアイテム内のボタンにバインドされたコマンドを呼び出す方法を理解するのを助けることができますか?

は、リストボックスの項目として、ユーザーコントロール内のコマンドを呼び出すには、予め

答えて

2

randyc、 を助けます(最初の)あなたは、リスト項目のローカル・データ・コンテキストにCommandParameterを結合して投稿してください。 2番目の投稿では、そのバインディングを見逃して、私は2番目のポートのコンテキストでは不可能だと思う。 あなたの場合、Element to Element bindingを使用して親データコンテキストのGetCFSDetailCommandコマンドにバインドすることを提案します。

+0

ありがとうございます。そして、あなたは要素のバインディングに要素を修正することで、親ページからデータコンテキストを失うユーザーコントロール(およびボタンの内部)の問題を解決するのに役立ちました。私はまた、元の投稿の構文についてお詫び申し上げますが、コマンドパラメータは使用されていませんでした。私はコマンドにパラメータを渡そうとしていたので、もともとはそれを持っていましたが、別のアプローチを使用しました。私は混乱を取り除くために元の質問を更新しました – rlcrews

1

で問題をありがとうパターンはコントロールのコンテキスト内でコマンドを探しているということです。明らかに、リストボックス項目はビジュアルツリーの外に飛ぶので、バインディングは継承されません。
これを修正するには、ボタンのデータコンテキストをViewModelに明示的に設定する必要がありました。これは最終的にElement to Elementバインディングを使用して解決され、ユーザーコントロールのデータコンテキストをその要素を含むメインビューに向けることができました。

・ホープこれはあなたの元に

関連する問題