J'ai un problème avec la liste d'éléments dans une liste déroulante. Ils ne mise à jour lorsque la ItemSource est rechargée (à partir d'un fichier)ComboBox affiché Les éléments ne sont pas mis à jour
Le WPF ressemble à ceci:
<DockPanel x:Name="Dock_Profil" DataContext="{Binding Profile, UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated= True}">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<ComboBox Margin="5" Width="200" ItemsSource="{Binding}" DisplayMemberPath="ProfilName" IsSynchronizedWithCurrentItem="True"
x:Name="cmbProfil" SelectedIndex="0" ></ComboBox>
<Button Margin="5">
<StackPanel Orientation="Horizontal" >
<Image Margin="2" Stretch="None" Source="/MEC_EDINeu;component/Resources/Add24.png" />
<Label>Neues Profil</Label>
</StackPanel>
</Button>
</StackPanel>
Le profil de la propriété est ce type:
Public Class EDIProfile
Inherits ObservableCollection(Of EDIProfil)
A certains points que je dois recharger le contenu du profil afin
Profile.Load()
OnPropertyChanged("Profile")
est appelée. (OnPropertyChanged est mis en œuvre dans le ViewModelBase.vb et transmis à MainWindowViewModel)
Quand je vérifie ensuite dans le MainWindow.xaml.vb en utilisant:
For Each item As EDIProfil In cmbProfil.Items
MsgBox(item.ProfilName & "__" & item.lastFA)
Next
les éléments corrects sont là-dedans.
Mais la liste déroulante dans l'interface graphique affiche toujours l'ancien contenu.
A i Solution trouvée (mais je ne veux pas l'utiliser pour tous comboboxes): si i (en mainwindow.xaml.vb) utilise cette ligne:
cmbProfil.Items.Refresh()
la mise à jour éléments affichés par le travail combobox (mais shouldnt la liaison à cela?)
Je suis assez nouveau pour WPF, dans l'espoir d'obtenir de l'aide ici.
Merci à l'avance
Quand je charge les données dans MainWindowViewModel (est que la bonne façon de le faire de toute façon?):
Public Sub loadProfile()
'Profile.Load()
Profile.Clear()
Dim xmls As XmlSerializer = New XmlSerializer(GetType(EDIProfile))
Dim reader As New StreamReader(System.Reflection.Assembly.GetExecutingAssembly().Location.Substring(0, System.Reflection.Assembly.GetExecutingAssembly().Location.LastIndexOf("\") + 1) & "EDIProfile.xml")
Dim temp As New EDIProfile
' MsgBox("KK")
temp = xmls.Deserialize(reader)
For Each item As EDIProfil In temp
Profile.Add(item)
Next
reader.Close()
OnPropertyChanged("Profile")
End Sub
Il fonctionne
Si je n'ouvre pas la liste déroulante avant de recharger les éléments, ils sont affichés correctement. – BernhardAF
Utilisez-vous un type de multi-threading pour mettre à jour votre ComboBox? – Rachel
@Rachel non Je ne sais pas – BernhardAF