1

私はこの質問が数回尋ねられるのを見ましたが、私のシナリオに対する完全な答えを見つけることができませんでした。

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

            <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 [+]" />

ボタンには、ビューに固有のクリックイベントがあります。これは、基本的に、可視性の状態に基づいてグリッド行を展開または折りたたみます。ここでは、UIに固有のイベントを使用しました。このボタンには、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にバインドされているときにボタンのコマンドが「失われる」か呼び出されないことです。このコマンドをビュー内の他のボタンに配置すると、コマンドが呼び出されます。リストボックスアイテム内のボタンにバインドされたコマンドを呼び出す方法を誰かが理解するのを手伝ってもらえますか?

前もって感謝します

4

2 に答える 2

2

randyc、元の(最初の)投稿CommandParameterで、をリストアイテムのローカルデータコンテキストにバインドしていました。2番目の投稿では、そのバインディングを見逃しています。2番目のポートのコンテキストでは不可能だと思います。あなたの場合、親データコンテキストからのコマンドにバインドするために要素から要素へのバインドを使用することを提案します。GetCFSDetailCommand

于 2011-06-15T07:25:21.597 に答える
1

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

お役に立てれば

于 2011-06-01T15:15:31.983 に答える