2010-06-13 27 views
1

我有一个绑定和模板化作为这样一个列表框容器数据:如何识别来电为模板活动

<ListBox x:Name="ListBox" 
      ItemsSource="{Binding Source={StaticResource List}}" 
      ItemTemplate="{StaticResource ListTemplate}"> 
    </ListBox> 

在我的ListTemplate资源,我定义它包含几个子元素的网格。我在其中一个子元素上设置了一个click事件处理程序。事件处理程序不是特定于行的,而且我需要一种(最佳实践)方式来标识ListBox中哪个行触发了该事件。

从我的数据源,我有一个唯一的ID对应的行。我目前不在数据绑定中公开此ID,但可以。理想情况下,我希望事件处理程序能够识别事件被触发的行的ID。

回答

1

如果您能向我们展示您的网格的定义以便更好地了解您的问题,那将是非常棒的。

由于我网的的DataContext有我需要的所有数据,我做的是以下(我尝试尽可能使用的命令,而且还与事件处理程序)

private void NotificationLinkClick(object sender, RoutedEventArgs e) 
    { 
     var myDataObject = ((Hyperlink)sender).DataContext as MyDataObject; 
     DoSomeWork(myDataObject); 
    } 

我有一个超链接的每个在我的网格中排。为了知道选择了哪一个,我在事件处理程序中获取了DataContext,然后将其转换为我的基础对象。一旦我得到了“排”,我就做我需要做的事情。

而且,安东尼建议,我们可以使事情更通用

private void NotificationLinkClick(object sender, RoutedEventArgs e) 
    { 
     var myDataObject = ((FrameworkElement)sender) 
              .DataContext as MyDataObject; 
     DoSomeWork(myDataObject); 
    } 

我敢肯定有一个更好/更清洁的方式做到这一点,但这个工程。 HTH

+0

+1,不,我认为其他方法不一定更好或更清洁。也许如果MVVM框架使用Command可能会更好,但您的方法是最简单的。 (我可能会将'Hyperlink'改为具有'DataContext'属性的最大类型,而不是将代码限制为仅适用于超链接。 – AnthonyWJones 2010-06-13 08:11:47

+0

编辑,感谢您的意见。 – Marcote 2010-06-13 16:55:29