Отображаемые элементы ComboBox не обновляются - PullRequest
1 голос
/ 15 сентября 2011

У меня проблема со списком предметов в выпадающем списке. Они не обновляются при перезагрузке источника данных (из файла)

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

Работает

1 Ответ

0 голосов
/ 15 сентября 2011

Попробуйте это ... удалить привязку DataContext и привязать ItemsSource напрямую к Profile.

   <DockPanel x:Name="Dock_Profil">
       <StackPanel DockPanel.Dock="Top"
                   Orientation="Horizontal">
           <ComboBox Margin="5"
                     Width="200"
                     ItemsSource="{Binding Profile,  
                                           UpdateSourceTrigger=PropertyChanged,
                                           NotifyOnSourceUpdated= True}"   ... />
...