2013-03-04 15 views
5

DataGrid içine bir köprü eklemeyi ve MVVM desenini kullanarak RequestNavigate davranışını uygulamak için bir yöntem bulmaya çalışıyorum.MVVM deseninde Köprü kullanımı ile Hücre Şablonu

Şimdiye kadar çok fazla çözüm denedim, ancak bunların hiçbiri işe yaramıyor. Bana yardım edebilir misiniz, lütfen?

Bu benim xaml kodu:

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

ve bağıl ICommand gelişimini aşağıdaki: yanılıyorum

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

? Beklenmedik şekilde, ICommand asla çağrılmadı!

Başka türde bir etkinliği (örneğin, MouseEnter) kullanmayı denedim, ancak hiçbir şey değişmedi! Katkılarınız için şimdiden

sayesinde

Deby Köprünün DataContext DataGridRow, senin ViewModel tarafından temsil nesnenin olmasıdır

+0

DataRow ile temsil edilen nesnenin bulunan OpenLinkCommand mı yoksa komut ViewModel'inizde? –

+0

Aslında ViewModel'ımda var ... – Deby

cevap

10

. Bu nedenle, o ViewModel'e (ya RelativeSource AncestorType veya ElementName) sahip olmanız için bir bağlama yöntemi kullanmanız gerekir.

ElementName (sizin DataGrid adlandırılır varsayarak 'myDataGrid')

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

RelativeSource

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

Sorun çözüldü! Çok teşekkür ederim ZF !! : D – Deby

+0

dude, ve köprülerimin neden çalışmadığını araştırıyorum. Ben 1 aşağı kaydırma gibi aynı yöntemi uyguladı, göremedim. – Javidan