2013-03-04 30 views
5

Tôi đang cố gắng chèn một siêu liên kết trong một DataGrid và tìm phương pháp để thực hiện hành vi RequestNavigate bằng mẫu MVVM.Mẫu ô có sử dụng siêu liên kết trong mẫu MVVM

Tôi đã thử nhiều giải pháp cho đến bây giờ, nhưng không có giải pháp nào hoạt động. Bạn có thể vui lòng giúp tôi không?

Đây là mã XAML của tôi:

<dgWPFCtrl:ExtDataGridTemplateColumn Header="Link to XXX" Width="*"> 
        <dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock > 
           <Hyperlink NavigateUri="{Binding Path=ID_HTTP_LINK}" 
              > 
            <TextBlock Text="{Binding Path=ID_HTTP_LINK}"/> 
            <i:Interaction.Triggers> 
             <i:EventTrigger EventName="RequestNavigate"> 
              <WPFCtrl:EventToCommand 
               PassEventArgsToCommand="True" 
               Command="{Binding Path=OpenLinkCommand}" /> 
             </i:EventTrigger> 
            </i:Interaction.Triggers> 
           </Hyperlink> 
          </TextBlock> 
         </DataTemplate> 
        </dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate> 
       </dgWPFCtrl:ExtDataGridTemplateColumn> 

và làm theo tấm thân ICommand phát triển:

//Command for open link 
RelayCommand _openLinkCommand; 
public ICommand OpenLinkCommand 
{ 
    get 
    { 
     if (_openLinkCommand == null) 
      _openLinkCommand = new RelayCommand(param => 
      { 
       //Command Body ... 
      }); 
     return _openLinkCommand; 
    } 
} 

đâu tôi sai? Thật bất ngờ, ICommand thậm chí không bao giờ được gọi!

Tôi đã cố gắng sử dụng các loại sự kiện khác (chẳng hạn như MouseEnter), nhưng không có gì thay đổi!

Cảm ơn trước vì những đóng góp của bạn,

Deby

+0

Là OpenLinkCommand nằm trong đối tượng được đại diện bởi các DataRow, hoặc là lệnh trong ViewModel của bạn? –

+0

Thực ra nó ở trong ViewModel của tôi ... – Deby

Trả lời

10

DataContext của Hyperlink là của đối tượng đại diện bởi các DataGridRow, không ViewModel của bạn. Vì vậy, bạn sẽ phải sử dụng một phương pháp ràng buộc để đưa bạn đến ViewModel đó (hoặc RelativeSource AncestorType hoặc ElementName).

ElementName (giả sử DataGrid của bạn được đặt tên là 'myDataGrid')

Command="{Binding ElementName=myDataGrid, Path=DataContext.OpenLinkCommand}" 

RelativeSource

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenLinkCommand}" 
+0

Đã giải quyết được sự cố! Cảm ơn bạn rất nhiều ZF !! : D – Deby

+0

dude và tôi đang đào web vì sao các siêu liên kết của tôi không hoạt động. Ngay cả khi tôi áp dụng cùng một phương pháp như 1 cuộn xuống, không thể nhìn thấy nó. – Javidan

Các vấn đề liên quan