2013-03-04 36 views
5

我特林以實現使用MVVM模式RequestNavigate行爲DataGrid內插入超鏈接,並找到一個方法超鏈接的使用。細胞模板與MVVM模式

我已經嘗試了很多解決了到現在爲止,但他們沒有工作。請問你能幫幫我嗎?

這是我的XAML代碼:

<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> 

,並按照相關ICommand發展:

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

我哪裏錯了?意外的是,ICommand從來沒有被稱爲!

我試着也使用其他類型的事件(如MouseEnter),但什麼都沒有改變!

預先感謝您的貢獻,

德比

+0

位於該對象的OpenLinkCommand通過DataRow中所代表,或者是命令在你的ViewModel中? – 2013-03-04 14:33:45

+0

其實它在我的ViewModel ... – Deby 2013-03-04 14:51:00

回答

10

超鏈接的DataContext的是,由DataGridRow,不是你的視圖模型所代表的對象。所以,你將不得不使用裝訂方法,讓你到視圖模型(無論是的RelativeSource AncestorType,或的ElementName)。

的ElementName(假設你的數據網格被命名爲 'myDataGrid')

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

的RelativeSource

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

問題解決了!非常感謝ZF! :D – Deby 2013-03-04 15:29:14

+0

老兄,我在挖網爲什麼我的超鏈接無法正常工作。即使我使用相同的方法,如1向下滾動,看不到它。 – Javidan 2017-05-23 04:15:20