我知道在SOF和Google中有多個帖子有類似的標題,但請耐心等待一分鐘。將參數傳遞給代碼後面的RelayCommand
我下面這篇文章,創建我的GridView的上下文菜單:http://www.koaxkoaxkoax.com/ribbit/2010/09/creating-dynamic-menus-in-wpf.html
我UserControl.Resources
創建HierarchicalDataTemplate,我在GridView的資源,然後我在實際的情境中引用一個空菜單菜單。在XAML(可在GridView的第一部分)如下:
<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
-object是在同一水平foo
和bar
。然後我遍歷一個列表併爲每個列表項目創建一個ViewMenuItem
-object並將它們作爲子對象附加。這看起來就像我想要的一樣。但我無法獲得實際的功能。
在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)
行是混淆了我。我發現許多很多例子看起來完全一樣。當我運行我的程序並點擊其中一個子元素時,SetSeriesExecute
方法被正確調用 - 但參數始終爲空。不要太奇怪,因爲我實際上沒有提供類型爲Series
的對象作爲參數。我試圖在RelayCommand構造函數中提供這樣的參數:p=>_view.SetSeriesExecute(mySeriesObject)
。它編譯,但從未調用SetSeriesExecute
。我的目標非常簡單(至少我認爲是這樣):當程序對上下文菜單中的一個元素進行點擊時,方法(SetSeriesExecute
)需要知道哪個項目實際上已被選中(=已點擊在)由用戶。不幸的是,儘管經過了4個小時的嚴肅研究,我仍無法弄清楚在哪裏以及如何向SetSeriesExecute
提供參數。事實上,其他人似乎都瞭解可用的例子並不會讓我感到自己特別好,並且我對每一個提示都表示終生感激。
最佳 彼得
+1,或者對'CommandParameter'應用綁定。事實上,兩者都應該受到約束。 – user7116 2013-02-20 18:03:15
我已將'Series CommandParameter'添加到我的'ViewMenuItem'類中。但是'SetSeriesExecute'中的參數仍然爲空。無論如何,SetSeriesExecute如何知道該屬性? – Peter 2013-02-20 18:05:58
什麼是'series.ForcedName'? – Khan 2013-02-20 18:18:03