可能重複:
Passing two command parameters using a WPF binding多參數傳遞給命令WPF
我有以下層次:
abstract class TicketBase
{
public DateTime PublishedDate { get; set; }
}
class TicketTypeA:TicketBase
{
public string PropertyA { get; set; }
}
class TicketTypeB:TicketBase
{
public string PropertyB { get; set; }
}
在我的VM我有一個List<TicketBase> Tickets
。當用戶點擊我的應用程序的按鈕,他們希望看到的有一定財產的以前值的列表,如:
<Button Tag="{x:Type Types:TicketTypeA}"
Command="{Binding ListHistoryCommand}"
CommandParameter="{Binding Tag, RelativeSource={RelativeSource Self}}" />
,你可以看到,我在我的Tag
屬性設置爲TicketTypeA並傳遞作爲參數傳遞給我的命令:
private void ListHistory(object o)
{
if (Tickets.Count == 0)
return;
Type ty = o as Type;
ValueHistory = new ObservableCollection<TicketBase>(GetTicketsOfType(ty).Select(t => t)); // <- Need to return t.PropertyA here, but dynamically
}
IEnumerable<TicketBase> GetTicketsOfType(Type type)
{
if (!typeof(TicketBase).IsAssignableFrom(type))
throw new ArgumentException("Parameter 'type' is not a TicketBase");
return Tickets.Where(p => p.GetType() == type);
}
(ValueHistory
是我設置爲ItemsSource
我網的另一個集合)
不過,我還需要通過在屬性名了,所以我可以在網格像這樣只顯示該屬性:
Published Time | PropertyA
===================================================
09:00 | <value of PropertyA at 09:00>
08:55 | <value of PropertyA at 08:55>
所以,問題基本上是什麼屬性名傳遞另一個參數進我的命令最乾淨的方式是什麼?
但它並沒有真正解釋在那裏我可以存儲我的屬性名..作爲即時通訊已經在使用該標籤存儲的類型,我需要換個地方來存儲屬性名稱。我會查看添加附加屬性到按鈕。 – cjroebuck 2011-02-24 14:57:57
@cjroebuck:好的。所以你們都希望把它存儲起來並把它作爲CommandParameter發送出去?在這種情況下,我認爲你必須像你說的那樣使用附加屬性 – 2011-02-24 14:59:19
@cjroebuck:查看我更新的答案。你有沒有特別的理由來將這些屬性存儲在'Button'本身上,或者你認爲這樣的想法會起作用嗎?也許我錯過了這裏的一些問題的部分:) – 2011-02-24 15:21:42