2010-06-13 20 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