2011-08-03 94 views
1

在數據模板的訂單項上掛接mvvm-light EventToCommand的語法是什麼?對於主模型上的操作,下面的語法工作正常,但是,如果我正在對數據模板中的行項目執行操作,則綁定不起作用,我需要確定要在其上操作的特定行項目。GalaSoft_MvvmLight_Command:ListItem上按鈕上的EventToCommand?

在嘗試將事件連接到命令之前,我已將訂單項單擊掛鉤到XAML代碼隱藏中的事件處理程序;處理程序從事件參數中提取行項目數據對象,然後通過DataContext將視圖行項目數據對象傳遞給視圖模型,並且工作正常,但我希望保持與整個應用程序的處理一致。

輸出中的運行時錯誤: System.Windows.Data錯誤:BindingExpression路徑錯誤:'ModelLineItem'上未找到'EditLineCommand'屬性。 BindingExpression:Path ='EditLineCommand'DataItem ='Model.LineItem';目標元素是'System.Windows.Controls.Button'(Name ='EditRowButton');目標屬性是「DependencyPropertyListener39」(類型「System.Object的」)..

XAML main layout: 
<!-- Line Items --> 
<ListBox ItemTemplate="{StaticResource LineItemTemplate}" ItemsSource="{Binding Model.LineItems}"/> 

XAML data template: 
<DataTemplate x:Key="LineItemTemplate"> 
<Button> 
<Image Source="..." /> 
<Custom:Interaction.Triggers> 
<Custom:EventTrigger EventName="Click"> 
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding EditLineCommand, Mode=OneWay}" /> 
</Custom:EventTrigger> 
</Custom:Interaction.Triggers> 
</Button> 
</DataTemplate> 

更新 - 我覺得我幾乎沒有,@Claus'答案通過求解命令綁定了我大部分的方式問題。要確定具體的線路進行操作,我綁定到的LineItem的LineNumber上,然後拉動繼電器命令參數OUT:

<GalaSoft_MvvmLight_Command:EventToCommand 
Command="{Binding DataContext.DeleteLineCommand, ElementName=DetailPage}"                  
CommandParameter="{Binding LineNumber}" 
PassEventArgsToCommand="True" /> 

...

public RelayCommand<int> DeleteLineCommand { get; private set; } 

...

DeleteLineCommand = new RelayCommand<int>((ln) => { DeleteLineItem(ln); }); 

這是一個可行的解決方案,但有沒有辦法綁定到完整的LineItem而不僅僅是一個成員?

+0

請注意,在WP7.5(Mango)中,可以直接在Button類上使用Command綁定,而不是使用EventToCommand。 –

+0

@ClausJørgensen雖然沒有解決綁定範圍的問題。 – AxelEckenberger

+0

哦,的確如此,但這很容易,所以我沒有把它看作是一個問題。我已經添加了一個答案,詳細說明它是如何輕鬆解決的。 –

回答

0

魔術:

<phone:PhoneApplicationPage x:Name="MyPage" ... > 
    ... 
    <GalaSoft_MvvmLight_Command:EventToCommand 
     Command="{Binding DataContext.EditLineCommand, ElementName=MyPage}" /> 
    ... 
</phone:PhoneApplicationPage> 

這樣的話,它會使用頁面的DataContext的,這通常是您的視圖模型。