आपको "इंटरएक्टिविटी" असेंबली और 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>
अब तक उत्तर के रूप में चिह्नित है क्योंकि यह अच्छा दिखता है और यह काफी सरल है। धन्यवाद! मैंने चयनित इटिम भी कोशिश की है लेकिन वर्चुअलाइजेशन के कारण कुछ समस्याएं थीं। आम तौर पर ऐसा लगता है कि डेटाग्रिड में कुछ कीड़े हैं। –
ठीक है, बस कोशिश की गई और यह शीर्ष-स्तर दृश्य मॉडल पर आग लगती है, न कि डेटाग्रिड में प्रत्येक तत्व के लिए दृश्य मॉडल। मुझे नहीं लगता कि मैं इसे प्रासंगिक दृश्य मॉडल पर सीधे आग लगा सकता हूं? अन्यथा मुझे लगता है कि मैं चयनित इटैम का भी उपयोग करूंगा। –
@BentRasmussen फिर से मेरा जवाब जांचें, मैंने और उदाहरण जोड़े। – kmatyaszek