【问题标题】:GalaSoft_MvvmLight_Command:EventToCommand on a button on a ListItem?GalaSoft_MvvmLight_Command:ListItem 上的按钮上的 EventToCommand?
【发布时间】:2011-08-03 20:38:33
【问题描述】:

在数据模板中的行项目上连接 mvvm-light EventToCommand 的语法是什么?对于主模型上的操作,如下所示的语法可以正常工作,但是如果我正在对数据模板中的行项目进行操作,则绑定不起作用,我需要识别要操作的特定行项目.

在尝试将事件连接到命令之前,我已将行项 click 连接到 XAML 代码隐藏中的事件处理程序;处理程序从事件 args 中提取行项目数据对象,然后通过 DataContext 将行项目数据对象传递给一个方法到视图模型并且工作正常,但我希望与整个应用程序的处理保持一致。

输出中的运行时错误: System.Windows.Data 错误:BindingExpression 路径错误:在“Model.LineItem”上找不到“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,然后在中继命令中拉出该参数:

<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。
  • @Claus Jørgensen 并没有解决绑定范围的问题。
  • 哦,没错,但这很容易,我不认为这是一个问题。我添加了一个答案,详细说明了它是如何轻松解决的。

标签: silverlight xaml windows-phone-7 mvvm-light


【解决方案1】:

有关如何从数据模板绑定到视图模型的属性(或命令)的讨论,请参阅 Bind datagrid to one ViewModel, column / combobox to another

【讨论】:

    【解决方案2】:

    魔术:

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

    这样,它将使用页面的 DataContext,通常是您的 ViewModel。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多