2010-07-13 89 views
0

我目前正在將一箇中等規模的WPF項目轉換爲MVVM,但遇到了一個我無法解決的問題。你能幫我一下嗎?將參數附加到KeyUp事件

目標框架是.NET 3.5.1。

我有一個列表視圖,從底層視圖模型獲取其項目。該視圖模型暴露了一個命令,從列表視圖中刪除所選項目。因此,命令參數綁定到列表視圖的SelectedItems屬性。

<ListView ItemsSource="{Binding MyItems}" 
      x:Name="MyListView" 
      SelectionMode="Extended"> 
</ListView> 
<Button x:Name="MyRemoveButton" 
     Content="Remove item" 
     Command="{Binding RemoveItemCommand}" 
     CommandParameter="{Binding ElementName=MyListView, Path=SelectedItems}"> 

我的目的是不僅按下一個按鈕時執行該命令,還可以當KeyUp事件的列表視圖解僱,按下的鍵是「刪除」。

我接近找到解決方案時,我偶然發現了在這個例子中互動觸發:

http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html?showComment=1250325648481#c3867495357686026904

現在有了這個演示的問題是,命令參數是按鍵,但對我來說我需要命令參數是SelectedItems屬性,我需要該命令僅在特定鍵上執行。

有沒有辦法做到這一點,沒有太多的開銷和MVVM的方式?

像這樣的事情將是真棒:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="KeyUp"> 
     <local:CommandAction Command="{Binding RemoveItemCommand}" 
          CommandParameter={Binding ElementName=MyListView, Path=SelectedItems} 
          EventArgument="Key.Delete"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

回答

1

您的隔離要求有多嚴格?如果您沒有使用Blend的設計人員,請將ViewModel方法的調用放入代碼隱藏的KeyUp或PreviewKeyUp事件處理程序中。

+0

這不是嚴格的,這是肯定一個選項,但現在我想要一個嚴格的分離。這是一種概念證明,我試圖探討在嚴格分離使用MVVM時可能遇到的各種問題。 – 2010-07-14 07:11:02

2

要做到這一點你需要ListView控件的屬性綁定「SelectedItems」你的視圖模型的MVVM方式,所以你可以從你的命令,並止跌使用不需要通過CommandParameter傳遞它。

+0

我想我會嘗試這樣做,使用此: http://blog.functionalfun.net/2009/02/how-to-databind-to-selecteditems.html – 2010-07-14 07:09:40