के बाद से अन्य उत्तर में से कोई भी मुझे मदद की (का उपयोग करते हुए हमेशा null
था SelectedItems
CommandParameter
के रूप में), यहाँ यूनिवर्सल विंडोज प्लेटफार्म (UWP) क्षुधा के लिए एक समाधान है। यह Microsoft.Xaml.Interactivity
और Microsoft.Xaml.Interactions.Core
का उपयोग कर काम करता है।
यहां व्यू है:
<ListView x:Name="ItemsList">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{x:Bind ViewModel.SelectedItemsChanged}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<!-- content etc. -->
</ListView>
यहाँ ViewModel है (RelayCommand
MVVM लाइट से एक वर्ग है):
private List<YourType> _selectedItems = new List<YourType>();
private RelayCommand<SelectionChangedEventArgs> _selectedItemsChanged;
public RelayCommand<SelectionChangedEventArgs> SelectedItemsChanged
{
get
{
if (_selectedItemsChanged == null)
_selectedItemsChanged = new RelayCommand<SelectionChangedEventArgs>((selectionChangedArgs) =>
{
// add a guard here to immediatelly return if you are modifying the original collection from code
foreach (var item in selectionChangedArgs.AddedItems)
_selectedItems.Add((YourType)item);
foreach (var item in selectionChangedArgs.RemovedItems)
_selectedItems.Remove((YourType)item);
});
return _selectedItemsChanged;
}
}
खबरदार है कि आप के बाद मूल संग्रह से आइटम निकालने जा रहे हैं अगर चयन पूरा हो गया है (उपयोगकर्ता बटन दबाता है आदि), यह आपके _selectedItems
सूची से आइटम भी हटा देगा! यदि आप इसे फ़ोरैच लूप में करते हैं, तो आपको InvalidOperationException
मिल जाएगा। इससे बचने के लिए, बस की तरह चिह्नित जगह में एक गार्ड जोड़ें:
if (_deletingItems)
return;
और फिर पद्धति जहां आप उदाहरण के लिए आइटम को हटाने में, ऐसा करते हैं:
_deletingItems = true;
foreach (var item in _selectedItems)
YourOriginalCollection.Remove(item);
_deletingItems = false;
स्रोत
2016-04-05 20:35:22
'चयनित इटम्स '(बहुवचन) डेटा बाध्यकारी का समर्थन नहीं करता है। [यह लिंक] देखें (http://stackoverflow.com/questions/803216/managing- बहु- चयन-with-mvvm) और [यह लिंक] (http://social.msdn.microsoft.com/forums/en- अमेरिका/WPF/धागा/edd335ea-e5e1-48e1-91a2-793d613f5cc3 /)। यह 'क्विक पैरामीटर' के रूप में काम नहीं करता है, मैं हमेशा 'शून्य' प्राप्त करता हूं, जबकि 'चयनित इटैम' (एकवचन) का उपयोग करना ठीक है। –
@ user986080 मुझे एहसास नहीं हुआ कि 'चयनित इटम्स' बाध्यकारी का समर्थन नहीं करता था। मैंने जवाब से हटा दिया। हालांकि 'कमांड पैरामीटर' काम करता है, मैंने इसका परीक्षण किया है और चयनित वस्तुओं की सूची में सक्षम था। – evanb
मेरा एक्सएएमएल उदाहरण 'लिस्टबॉक्स' दिखाता है लेकिन मैंने 'ListView' भी परीक्षण किया है और चयनित पैरामीटर कमांड पैरामीटर से प्राप्त करने में सक्षम था। – evanb