У меня проблема со списком предметов в выпадающем списке. Они не обновляются при перезагрузке источника данных (из файла)
WPF выглядит так:
<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>
Профиль недвижимости этого типа:
Public Class EDIProfile
Inherits ObservableCollection(Of EDIProfil)
В определенные моменты мне нужно перезагрузить содержимое профиля, чтобы
Profile.Load()
OnPropertyChanged("Profile")
называется. (OnPropertyChanged реализован в ViewModelBase.vb и передан в MainWindowViewModel)
Когда я проверяю потом в MainWindow.xaml.vb, используя:
For Each item As EDIProfil In cmbProfil.Items
MsgBox(item.ProfilName & "__" & item.lastFA)
Next
там есть нужные предметы.
Но в выпадающем списке в графическом интерфейсе все еще отображается старое содержимое.
Обходной путь, который я нашел (но я не хочу использовать его для всех списков):
Если я (в mainwindow.xaml.vb) использовать эту строку:
cmbProfil.Items.Refresh()
Обновление элементов, отображаемых в работе со списком (но разве не обязательна привязка к этому?)
Я довольно новичок в WPF, надеясь получить помощь здесь.
Заранее спасибо
Когда я загружаю данные в MainWindowViewModel (это все равно правильный способ сделать это?):
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
Работает