2011-05-10 46 views
0

我有一個gridview裏面的listview,它綁定到一個自定義對象列表。在一個單元格中,我有三個元素可以互換,其中之一是具有單擊事件的超鏈接。如何訪問XAML gridview的選定行中的信息?

當我轉到超鏈接上的單擊事件時,如何訪問綁定在同一行中的'CompanyName'?

這個問題可能是我的ASP.Net背景 - 我對WPF很陌生。

<GridViewColumn Header="File" Width="100" DisplayMemberBinding="{Binding Path=CompanyFile}"/> 
<GridViewColumn Header="Action" Width="300"> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Path=Status}" Visibility="{Binding Path=StatusVisibility}"></TextBlock> 
       <TextBlock Visibility="{Binding Path=ButtonVisibility}"><Hyperlink Click="Hyperlink_Click"><TextBlock Text="{Binding Path=Button}"></TextBlock></Hyperlink></TextBlock> 
       <ProgressBar Value="{Binding Path=Progress}" Visibility="{Binding Path=ProgressVisibility}"/> 
      </StackPanel> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

回答

3

Hyperlink繼承父ListViewItemDataContext,所以你只需要投它:

void Hyperlink_Click(object sender, EventArgs e) 
{ 
    Hyperlink link = (Hyperlink)sender; 
    MyCustomObject obj = (MyCustomObject)link.DataContext; 
    string companyName = obj.CompanyName; 
    ... 
} 

另一種選擇是,以超鏈接的Command屬性綁定到一個命令你的DataContext,而不是明確處理Click事件。這有助於將視圖從與業務相關的代碼中分離出來,並且這是在MVVM pattern中執行操作的常用方式。