2013-03-10 7 views
15

चुनें, जब मैं डेटाग्रिड में कोई पंक्ति चुनता हूं तो मैं कमांड निष्पादित करना चाहता हूं।डेटाग्रिड बाई कमांड को पंक्ति में

मुझे लगता है कि बटन में सेल सामग्री को लपेटना संभव है (हालांकि मुझे बटन शैली नहीं चाहिए) - लेकिन मैं इसे सेल-स्तर पर नहीं करना चाहता हूं।

मुझे यह भी लगता है कि किसी ईवेंट को कमांड जोड़ने के लिए व्यवहार का उपयोग करना संभव है। लेकिन अधिमानतः मुझे इस तरह के एक आम कार्य के लिए व्यवहार का सहारा लेना नहीं चाहिए।

क्या सादे पुराने कमांड डेटाबेस के माध्यम से ऐसा करना संभव है?

तो: 1) उपयोगकर्ता डेटाग्रिड पंक्ति 2 पर क्लिक करता है) दृश्य मॉडल पर आदेश निकाल दिया जाता है।

अग्रिम धन्यवाद।

उत्तर

39

आपको "इंटरएक्टिविटी" असेंबली और SelectionChanged ईवेंट का उपयोग करना चाहिए।

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

इसके अलावा, आप डेटा ग्रिड के SelectedItem संपत्ति के लिए और सेट एक्सेसर में आप अपने आदेश आह्वान कर सकते हैं बाध्यकारी लिख सकते हैं, लेकिन पहले समाधान है कि मैं प्रस्तुत:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding People}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding ID}" /> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
    </DataGrid.Columns> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding MyCommand}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</DataGrid> 

कहाँ "i" नाम का स्थान आप ऊपर बेहतर है।

आप मुख्य दृश्य मॉडल से आदेश आह्वान और DataGrid से SelectedItem पास करना चाहते हैं आप CommadParameter उपयोग कर सकते हैं:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="SelectionChanged"> 
     <i:InvokeCommandAction Command="{Binding MyCommand}" 
     CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

आप निम्नलिखित कोड का उपयोग कर सकते आइटम खुद आदेश होता है तो:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="SelectionChanged"> 
     <i:InvokeCommandAction Command="{Binding Path=SelectedItem.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

या यदि तत्वों का अपना दृश्य मॉडल है जो इसे DataContext पर असाइन किया गया है, तो आप निम्न कोड का उपयोग कर सकते हैं:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="SelectionChanged"> 
     <i:InvokeCommandAction Command="{Binding Path=SelectedItem.DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
+0

अब तक उत्तर के रूप में चिह्नित है क्योंकि यह अच्छा दिखता है और यह काफी सरल है। धन्यवाद! मैंने चयनित इटिम भी कोशिश की है लेकिन वर्चुअलाइजेशन के कारण कुछ समस्याएं थीं। आम तौर पर ऐसा लगता है कि डेटाग्रिड में कुछ कीड़े हैं। –

+0

ठीक है, बस कोशिश की गई और यह शीर्ष-स्तर दृश्य मॉडल पर आग लगती है, न कि डेटाग्रिड में प्रत्येक तत्व के लिए दृश्य मॉडल। मुझे नहीं लगता कि मैं इसे प्रासंगिक दृश्य मॉडल पर सीधे आग लगा सकता हूं? अन्यथा मुझे लगता है कि मैं चयनित इटैम का भी उपयोग करूंगा। –

+1

@BentRasmussen फिर से मेरा जवाब जांचें, मैंने और उदाहरण जोड़े। – kmatyaszek

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