दिलचस्प पोस्ट
एक फ़ोल्डर और फ़ाइल को सीधा पहुंच से इनकार करते हैं MVC4 इनपुट फ़ील्ड प्लेसहोल्डर सिर टैग में इनलाइन कोड – ASP.NET WPF और प्रारंभिक फ़ोकस OpenSSL API का उपयोग करके प्रमाण पत्र श्रृंखला को प्रोग्राम की पुष्टि करें सुपर क्लास से उपवर्ग विधि को कॉल करना angular.js लिंक व्यवहार – विशिष्ट URL के लिए गहरी लिंक को अक्षम करें एक सक्रिय अपवाद के बिना सी ++ समाप्त होता है लिस्ट <टी> बनाम बाइंडिंग सूची <टी> फायदे / डिसाइन्डन्स क्या कोई निश्चित आकार की कतार जो अत्यधिक तत्वों को निकालता है? मैं ओरेकल में तालिकाओं के आकार की गणना कैसे करूं? जब अस्थिर खोजशब्द को सी # में इस्तेमाल किया जाना चाहिए? क्रोम में गलत MIME प्रकार के साथ फ़ॉन्ट-चेहरे सूची में आइटम की स्थिति कैसे प्राप्त करें? डेटटाइम serializing करते समय मिलीसेकंड को शामिल करने के लिए JSON.NET को बल दें (भले ही एमएस घटक शून्य है)

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 पर एक बैकर प्रॉपर्टी के लिए है?

Solutions Collecting From Web of "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

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