2

SOFとGoogleのいたるところに同じようなタイトルの投稿が複数あることは知っていますが、しばらくお待ちください。

この記事に従って、グリッドビューのコンテキストメニューを作成しています:http ://www.koaxkoaxkoax.com/ribbit/2010/09/creating-dynamic-menus-in-wpf.html

でHierarchicalDataTemplateを作成しUserControl.Resourcesます。グリッドビューのリソースに空のメニューがあり、実際のコンテキストメニューで参照します。XAML(グリッドビューの最初の部分)は次のようになります。

        <DataGrid.Resources>
            <Views:ViewMenuItemCollection x:Key="Menu">
                <Views:ViewMenuItem Text="foo"/>
                <Views:ViewMenuItem Text="bar"/>
            </Views:ViewMenuItemCollection>
        </DataGrid.Resources>
        <DataGrid.ContextMenu>
            <ContextMenu ItemsSource="{DynamicResource Menu}"/>
        </DataGrid.ContextMenu>

背後にあるコードではFindResource、メニューへの参照を取得し、およびとViewMenuItem同じレベルにある1つのオブジェクトを作成するために使用します。次に、リストを反復処理し、リストアイテムごとに1つのオブジェクトを作成し、それらを子オブジェクトとしてアタッチします。それは私がそれを持ちたいのと同じように見えます。しかし、実際の機能を動作させることはできません。foobarViewMenuItem

foreachループの内部(子オブジェクトを作成する場所)は次のようになります。

ViewMenuItem seriesItem = new ViewMenuItem();
seriesItem.Text = series.ForcedName;
seriesItem.Command = new RelayCommand<Series>(p=>_view.SetSeriesExecute(p));             
_setSeriesMenuItem.Children.Add(seriesItem);

特に含む行p=>_view.SetSeriesExecute(p)は私を混乱させます。私はそれとまったく同じように見える多くの例を見つけました。プログラムを実行して子要素の1つをクリックすると、SetSeriesExecuteメソッドは適切に呼び出されますが、パラメーターは常にnullです。それほど驚くことではありません。なぜなら、実際には、型のオブジェクトをSeriesパラメーターとして提供することはないからです。私は次のようにRelayCommandコンストラクターでパラメーターを提供しようとしました:p=>_view.SetSeriesExecute(mySeriesObject)。コンパイルされますが、SetSeriesExecute呼び出されることはありません。

私の目標は非常に単純です(少なくともそうだと思います):プログラムがコンテキストメニューの要素のクリックに反応するとき、メソッド(SetSeriesExecute)は、ユーザーが実際に選択(=クリック)した項目を知る必要があります。残念ながらSetSeriesExecute、4時間の真剣な調査にもかかわらず、パラメータをどこにどのように提供できるかを理解できませんでした。そして、他の誰もが利用可能な例を理解しているように見えるという事実は、私が自分自身について特に気分が良くなるわけではなく、すべてのヒントに生涯の感謝を捧げます。

最高のピーター

4

1 に答える 1