2010-04-16 11 views
6

क्या कोई तरीका है कि मैं एक कमांड को DataGridHyperlinkColumn से जोड़ सकता हूं? मैं इस की कोशिश की है:क्या एक डब्ल्यूपीएफ टूलकिट डेटाग्रिड हाइपरलिंक कॉलम के साथ कमांड को जोड़ने का कोई तरीका है?

<DataGridHyperlinkColumn Header="Client Name" Binding="{Binding ShortName}"> 
    <DataGridHyperlinkColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
     <Setter Property="Hyperlink.Command" 
            Value="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ClientsSummaryView}}}"/> 
          <Setter Property="Hyperlink.CommandParameter" Value="{Binding}"/> 
         </Style> 
        </DataGridHyperlinkColumn.ElementStyle> 
    </DataGridHyperlinkColumn> 

रनटाइम पर, मैं देख सकता हूँ कि बाध्यकारी सही ढंग से मूल्यांकन किया जा रहा है (कमांड के लिए संपत्ति गेटर कहा जाता है), लेकिन जब मैं हाइपरलिंक पर क्लिक कमान निष्पादित नहीं है। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

धन्यवाद,

डैनियल

उत्तर

10

क्या आप वाकई आदेश हाइपरलिंक के साथ जुड़े किया जा रहा है कर रहे हैं? मैंने इसे नमूना ऐप में स्थापित करने का प्रयास किया, और कमांड को हाइपरलिंक से जोड़ा नहीं जा रहा था (यदि आप CanExecute से झूठी वापसी करते हैं, तो आप जल्दी से यह निर्धारित करने में सक्षम होंगे कि यह वायर्ड हो गया है)।

इसके बजाय, मैं यह पूरा करने के लिए एक DataGridTemplateColumn बनाया:

<DataGridTemplateColumn Header="Client Name"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Hyperlink Command="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource AncestorType={x:Type local:ClientsSummaryView}}}" 
          CommandParameter="{Binding ShortName}"> 
        <TextBlock Text="{Binding ShortName}" /> 
       </Hyperlink> 
      </TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

यह वास्तव में कष्टप्रद मिलेगा यदि आप एकाधिक स्तंभों को बनाने के लिए किया था। रिफ्लेक्टर के साथ टूलकिट खोलने के बाद, ऐसा लगता है कि यह हाइपरलिंक का उपयोग करने के लिए TargetName/NavigationUrl प्रतिमान का समर्थन कर रहा है।

यदि आपके पास ऐसा परिदृश्य है जहां आपको कई स्थानों पर इस प्रकार के कॉलम की आवश्यकता होगी, तो मैं DataGridHyperlinkColumn को विस्तारित करने और कमांड प्रॉपर्टी जोड़ने का सुझाव दूंगा। फिर आप GenerateElement से लौटाए गए तत्व को संशोधित कर सकते हैं ताकि यह आपके आदेश का उपयोग कर सके।

+0

अबे: धन्यवाद। मैं डेटाग्रिड टेम्पलेट कॉलम के चारों ओर शॉर्टकट करने की उम्मीद कर रहा था, लेकिन, ईमानदारी से, यह मेरे पास जो भी था उससे ज्यादा बुरा नहीं दिखता है। एक बार फिर धन्यवाद! – dks1983

+0

क्या आप समझा सकते हैं कि '<हाइपरलिंक कमांड = "{बाध्यकारी ...">' काम करता है? यह बहुत जटिल लग रहा है। – Dai

+0

@ दाई - यह 'रिलेवेट्ससोर्स 'है जो' क्लाइंटसमरी व्यू' के 'डेटाकॉन्टेक्स्ट' पर 'आईसीओएमएंड 'संपत्ति के लिए बाध्यकारी है जहां यह कॉलम जोड़ा गया है। इस सवाल ने इन प्रकार के बाइंडिंग के बारे में पूछा, और आशा है कि आप इसे बेहतर समझने में मदद करेंगे: http://stackoverflow.com/questions/84278/how-do-i-use-wpf-bindings-with-relativesource/84317#84317 –

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