2013-05-07 6 views
5

मैं निम्न डेटा टेम्पलेट (और एक इसी दृश्य मॉडल, दिखाया गया है) है:का उपयोग कर सकते हैं नहीं स्पष्ट ListBox चयन SelectedItem = अशक्त - MVVM

<DataTemplate DataType="{x:Type logic:SnapshotListViewModel}"> 
    <ListBox ItemsSource="{Binding Snapshots}" /> 
</DataTemplate> 

ItemsSource स्नैपशॉट्स की एक सूची के लिए बाध्य है, अंदर पाए व्यूमोडेल मेरा लक्ष्य चयनित इटैम को साफ़ करना है, इसलिए सूची बॉक्स अपने प्रारंभिक, अचयनित स्थिति पर वापस जाता है। दृश्य मॉडल IPropertyNotified लागू करता है।

<ListBox SelectedItem={Binding SelectedSnapshot} .... /> 

दृश्य मॉडल में, मैं सेट SelectedSnapshot = अशक्त, लेकिन कुछ नहीं होता है, भले ही RaisePropertyChanged संपत्ति पर बुलाया गया था:

मैं एक तो जैसे XAML में बाध्यकारी गयी।

मैंने चयनित इटैम के बजाय चयनित इंडेक्स के साथ फिर कोशिश की। अभी भी कोई भाग्य नहीं है।

मुझे अंततः समाधान मिला, जो मैं नीचे विस्तार से बताऊंगा।

उत्तर

10

चयनित इटैम और चयनित इंडेक्स को भूल जाएं। जवाब चयनित वैल्यू, के साथ IsSynchronizedWithCurrentItem = "True" है।

<ListBox IsSynchronizedWithCurrentItem="True" 
     SelectedValue="{Binding SelectedSnapshotValue}" .../> 
फिर

, जब मैं दृश्य मॉडल में ResetSelection() कहते हैं, SelectedSnapshotValue अशक्त के लिए सेट है,

void ResetSelection() 
{ 
    SelectedSnapshotValue = null; 
} 

जो डेटा टेम्पलेट में बाध्यकारी, बाध्य संपत्ति का उपयोग कर अद्यतन करता है:

private SnapshotViewModel selectedSnapshotValue; 
    public SnapshotViewModel SelectedSnapshotValue 
    { 
     get { return selectedSnapshotValue; } 
     set 
     { 
      if (selectedSnapshotValue != value) 
      { 
       selectedSnapshotValue = value; 
       RaisePropertyChanged("SelectedSnapshotValue"); 
      } 
     } 
    } 

यह एकमात्र तरीका है जिससे मैं चयन को रीसेट करने के लिए अपना सूची बॉक्स प्राप्त करने में सक्षम था।

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