在數據模板的訂單項上掛接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而不僅僅是一個成員?
請注意,在WP7.5(Mango)中,可以直接在Button類上使用Command綁定,而不是使用EventToCommand。 –
@ClausJørgensen雖然沒有解決綁定範圍的問題。 – AxelEckenberger
哦,的確如此,但這很容易,所以我沒有把它看作是一個問題。我已經添加了一個答案,詳細說明它是如何輕鬆解決的。 –