दिलचस्प पोस्ट
Android पढ़ें ब्राउज़र का इतिहास मैं setTimeout () कॉलबैक में एक पैरामीटर कैसे पास कर सकता हूं? क्यों नहीं jQuery का उपयोग requestAnimationFrame का उपयोग करता है? वेब एपीआई संदेश हैंडलर में कस्टम हैडर मान को निकालने के लिए कैसे? एमके एनोटेशन दृश्य – स्थान अपडेट को पिन करने के लिए कस्टम एनोटेशन दृश्य लॉक करें निष्पादन विफल अनुप्रयोग: प्रक्रिया DebugResources एंड्रॉइड स्टूडियो Ionic ढांचे के साथ दूरस्थ छवि प्रदर्शित करने के लिए Android Hybid ऐप के साथ जारी करना? क्या सी ++ 11 में त्रि-सुरक्षित धागा सुरक्षित है? संलग्न किए गए अभिभावक को भरने के लिए कैनवास का स्वचालित रूप से आकार बदलें PHP में एकाधिक वंशानुक्रम Com.google.android.gms नहीं मिल सका: प्ले-सेवाओं: 3.1.5 9 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.52 5.0.77 5.0.8 9 5.2.08 6.1। 11 6.1.71 6.5.87 असिंक्रोनस बनाम मल्टीथ्रेडिंग – क्या कोई अंतर है? IPhone अनुप्रयोगों की चोरी को कम करना PhpMyadmin में अधिकतम निष्पादन समय फ़ंक्शन तर्क में पूर्व-वेतन वृद्धि और बाद-वेतन वृद्धि के लिए आपरेशन का आदेश?

MVVM के साथ कई चयन प्रबंधित करना

एमवीवीएम सीखने की मेरी यात्रा पर मैंने WPF और व्यू मॉोडल पैटर्न की कुछ बुनियादी समझ स्थापित की है। मैं सूची प्रदान करते समय निम्न अमूर्त उपयोग का उपयोग कर रहा हूं और एक भी चयनित आइटम में दिलचस्पी ले रहा हूं।

public ObservableCollection<OrderViewModel> Orders { get; private set; } public ICollectionView OrdersView { get { if( _ordersView == null ) _ordersView = CollectionViewSource.GetDefaultView( Orders ); return _ordersView; } } private ICollectionView _ordersView; public OrderViewModel CurrentOrder { get { return OrdersView.CurrentItem as OrderViewModel; } set { OrdersView.MoveCurrentTo( value ); } } 

तब मैं WPF में एक सूची में सॉर्टिंग और फ़िल्टरिंग का समर्थन करने के साथ ऑर्डर व्यू को बाध्य कर सकता हूं:

 <ListView ItemsSource="{Binding Path=OrdersView}" IsSynchronizedWithCurrentItem="True"> 

यह एकल चयन विचारों के लिए वास्तव में अच्छी तरह से काम करता है। लेकिन मैं दृश्य में कई चयनों का समर्थन करना चाहता हूं और मॉडल को चयनित आइटमों की सूची में बाँधना होगा।

मैं ListView कैसे बाँधूँगा.चयनित ViewModel पर एक बैकर प्रॉपर्टी के लिए है?

वेब के समाधान से एकत्रित समाधान "MVVM के साथ कई चयन प्रबंधित करना"

अपने बच्चे को देखें OrderViewModel (अपने मामले में OrderViewModel ) के लिए एक IsSelected संपत्ति जोड़ें:

 public bool IsSelected { get; set; } 

कंटेनर पर चयनित संपत्ति को बाइंड करें (इस मामले में लिस्टबॉक्स के लिए):

 <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/> </Style> </ListBox.ItemContainerStyle> 

IsSelected को कंटेनर पर संबंधित फ़ील्ड से मेल करने के लिए अपडेट किया गया है।

आप निम्नलिखित मॉडल के द्वारा चयनित मॉडल में चयनित बच्चों को प्राप्त कर सकते हैं:

 public IEnumerable<OrderViewModel> SelectedOrders { get { return Orders.Where(o => o.IsSelected); } } 

मैं आपको आश्वासन दे सकता हूं: SelectedItems आइटम वास्तव में एक XAML CommandParameter पैरामीटर के रूप में बांधा जा सकता है

इस आम समस्या का एक सरल समाधान है; यह काम करने के लिए आपको निम्न नियमों का पालन करना होगा:

  1. एड बॉल के सुझाव के बाद , अपने एक्सएम्ल कमांड डाटाबेसिंग पर, Command गुण से पहले CommandParameter एट्रिब्यूट को परिभाषित करें। यह एक बहुत समय लेने वाली बग

    यहां छवि विवरण दर्ज करें

  2. सुनिश्चित करें कि आपके ICommand के CanExecute और Execute तरीकों में पैरामीटर का प्रकार object इस तरह से आप डाली अपवादों को रोक सकते हैं, जब भी CommandParameter प्रकार आपके Command विधि के पैरामीटर प्रकार से मेल नहीं खाता:

     private bool OnDeleteSelectedItemsCanExecute(object SelectedItems) { // Your code goes here } private bool OnDeleteSelectedItemsExecute(object SelectedItems) { // Your code goes here } 

उदाहरण के लिए, आप या तो ListView / ListBox की SelectedItems संपत्ति अपने ICommand तरीकों या ListView / ListBox खुद को भेज सकते हैं अच्छा, है ना?

मुझे उम्मीद है कि यह किसी व्यक्ति को यह पता लगाने के लिए कितना बड़ा समय खर्च करने से रोकता है कि SelectedItems CanExecute पैरामीटर के रूप में कैसे प्राप्त किया जाए

कोई एक संबद्ध संपत्ति बनाने का प्रयास कर सकता है

ऐसा करने से आप को बाइंड करें प्रत्येक सूची के लिए IsSelected संपत्ति जोड़ने से एक को बचाएगा। मैंने इसे ListBox लिए किया है, लेकिन इसे सूची दृश्य में उपयोग करने के लिए संशोधित किया जा सकता है।

 <ListBox SelectionMode="Multiple" local:ListBoxMultipleSelection.SelectedItems="{Binding SelectedItems}" > 

अधिक जानकारी: WPF – बाइंडिंग लिस्ट बॉक्स चयनित है – अटैचमेंट प्रॉपर्टी वीएस स्टाइल

यदि आप MVVM-LIGHT का उपयोग कर रहे हैं तो आप इस पैटर्न का उपयोग कर सकते हैं:

http://blog.galasoft.ch/archive/2010/05/19/handling-datagrid.selecteditems-in-an-mvvm-friendly-manner.aspx

विशेष रूप से खूबसूरत नहीं है लेकिन ऐसा लगता है कि यह कम से कम विश्वसनीय होना चाहिए