2013-03-04 7 views
5

में हाइपरलिंक उपयोग के साथ सेल टेम्पलेट मैं DataGrid के भीतर एक हाइपरलिंक डालने की कोशिश कर रहा हूं और एमवीवीएम पैटर्न का उपयोग कर RequestNavigate व्यवहार को लागू करने के लिए एक विधि ढूंढ रहा हूं।एमवीवीएम पैटर्न

मैं अब तक समाधान अप का एक बहुत कोशिश की है, लेकिन उनमें से कोई काम करता है। क्या आप कृपया मेरी मदद कर सकते हैं?

यह मेरी 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 जैसे) के अन्य प्रकार का उपयोग करने की कोशिश की है, लेकिन कुछ भी नहीं बदला!

अपने योगदान के लिए अग्रिम धन्यवाद,

Deby

+0

वस्तु में स्थित OpenLinkCommand DataRow द्वारा प्रतिनिधित्व किया जा रहा है, या आदेश है अपने ViewModel में? –

+0

असल में यह मेरे व्यूमोडेल में है ... – Deby

उत्तर

10

हाइपरलिंक के DataContext वस्तु DataGridRow नहीं, बल्कि आपके ViewModel के प्रतिनिधित्व वाले का है। इसलिए आपको उस व्यूमोडेल (या तो सापेक्ष स्रोत पूर्वजों टाइप या एलिमेंटनाम) पर जाने के लिए बाध्यकारी विधि का उपयोग करना होगा।

ElementName (यह मानते हुए कि आपके डेटा ग्रिड का नाम है 'myDataGrid')

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

RelativeSource

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

समस्या हल हो गई! बहुत बहुत धन्यवाद ZF !! : डी – Deby

+0

दोस्त, और मैं वेब खोद रहा हूं क्यों मेरे हाइपरलिंक्स काम नहीं कर रहे हैं। यहां तक ​​कि मैंने 1 विधि नीचे एक ही विधि लागू की, इसे देख नहीं सका। – Javidan

संबंधित मुद्दे