2010-05-18 17 views
10

में चुने गए आइटम को कैसे सेट करें ऐसा लगता है कि किसी ने अभी तक चयनित Item = "बाइंडिंग प्रॉपर्टी" के साथ चुने गए comboboxitem को सेट करने का कोई तरीका नहीं मिला है।एमवीवीएम, डब्ल्यूपीएफ: एक कंबोबॉक्स

क्या combMoxel ऑब्जेक्ट में combModel ऑब्जेक्ट में IsSelected Property का उपयोग करने का समाधान है?

उत्तर

14

एक combobox बंधन के लिए हमारी सफल दृष्टिकोण पीछा कर रहा है ...

<ComboBox 
    ItemsSource="{Binding Path=AllItems}" 
    SelectedItem={Binding Path=CurrentItem, Mode=TwoWay} /> 
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" /> 

class public ItemListViewModel 
{ 
    public ObservableCollection<Item> AllItems {get; set;} 

    private Item _currentItem; 
    public Item CurrentItem 
    { 
     get { return _currentItem; } 
     set 
     { 
      if (_currentItem == value) return; 
      _currentItem = value; 
      RaisePropertyChanged("CurrentItem"); 
     } 
    } 
} 
+1

यह अजीब है। मैं कसम खाता हूँ सकता है मैं क्योंकि मैं कुछ ब्लॉगों पर इसके बारे में पढ़ा कि वास्तव में क्या आप से पहले सुझाव दिया था ... अब मैं फिर से कोशिश की और यह काम किया: पी इस बीच मैं के साथ इस अगर कोई रुचि एक्सडी है मदद की में // यूआई नियंत्रण में चयनित इंडेक्स के रूप में नया बनाया गया स्कूलक्लास सेट करें .. चयनितस्कूलक्लास इंडेक्स = (स्कूलक्लास.काउंट! = 0)? स्कूलक्लास। गणना - 1: 0; – msfanboy

+1

बस यह समस्या थी। मेरे पास 2 अलग-अलग संग्रह थे, और बराबर ऑपरेटर भूल गए थे, इसलिए एक्सएएमएल से जुड़ी एक की तुलना में वर्तमान संग्रह को दूसरे संग्रह से चुना गया था। तो लागू करने के बराबर इस मुद्दे को ठीक किया गया है। लेकिन एक ही संग्रह से चयन करने से भी इस मुद्दे को ठीक किया गया –

5

यह सुनिश्चित नहीं है कि आप अपने कोड को देखे बिना कॉम्बोबॉक्स पर चयनित इटैम से डेटा क्यों नहीं जोड़ सकते हैं। नीचे आपको एक संग्रह दृश्य का उपयोग करके यह कैसे करना है जिसमें वर्तमान आइटम प्रबंधन बनाया गया है जिसमें comboboxes का समर्थन करता है। कलेक्शन व्यू में एक CurrentItem प्रॉपर्टी है जिसका उपयोग आप वर्तमान में चुनने के लिए कर सकते हैं।

XAML:

<Window x:Class="CBTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel> 
     <ComboBox 
      ItemsSource="{Binding Path=Names}" 
      IsSynchronizedWithCurrentItem="True"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding}" /> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <TextBlock Text="{Binding Path=Names.CurrentItem}" /> 
    </StackPanel> 
</Window> 

कोड के पीछे:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Data; 

namespace CBTest 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      DataContext = new VM(); 
     } 
    } 

    public class VM 
    { 
     public VM() 
     { 
      _namesModel.Add("Bob"); 
      _namesModel.Add("Joe"); 
      _namesModel.Add("Sally"); 
      _namesModel.Add("Lucy"); 

      Names = new CollectionView(_namesModel); 

      // Set currently selected item to Sally. 

      Names.MoveCurrentTo("Sally"); 
     } 

     public CollectionView Names { get; private set; } 

     private List<string> _namesModel = new List<string>(); 
    } 
} 
+0

"... सुनिश्चित नहीं हैं कि तुम क्यों अपने कोड को देखे बिना कॉम्बोबॉक्स पर चयनित इटैम से डेटा बाध्य नहीं कर सकता .... " एक करें आसान गूगल यह एक बहुत व्यापक फैल गई समस्या है। कलेक्शन व्यू मेरे मामले में कुल ओवरहेड है और मैं अपने ऑब्जर्जेबल कोलेक्शन को लात नहीं सकता हूं क्योंकि मुझे इसे एड/डेल के लिए चाहिए जो संग्रह दृश्य नहीं है। – msfanboy

+0

एक संग्रह दृश्य एक अवलोकन करने योग्य चयन का दृश्य हो सकता है इसलिए कुछ भी लात मारने की आवश्यकता है। आपका क्या मतलब है कि संग्रह दृश्य कुल ओवरहेड है? क्या आप अन्य कार्यक्षमता के बारे में बात कर रहे हैं जो संग्रहव्यू वर्तमान के बगल में प्रदान करता है, जैसे फ़िल्टरिंग, ग्रुपिंग और सॉर्टिंग? मुझे अभी भी पता नहीं है कि एक combobox पर selectitem बाध्यकारी समस्या क्या है। –

+0

मुझे संग्रह दृश्य की आवश्यकता नहीं है ;-) अगर मैं नियंत्रण के काम को सॉर्ट करना चाहता हूं, तो मेरे मामले में डेटाग्रिड में यह कार्यक्षमता है। CollectionView एक सूचीदृश्य के लिए ठीक है जो कॉलम हेडर पर क्लिक करना सॉर्ट नहीं करता है। संग्रह दृश्य नमूने के लिए – msfanboy

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