显示的ComboBox项目未更新

时间:2011-09-15 13:29:58

标签: wpf combobox refresh

组合框中的项目列表存在问题。当重新加载itemsource(从文件中)时,它们不会更新

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

正确的物品在那里。

但GUI中的组合框仍显示旧内容。


我找到的解决方法(但我不想将它用于所有组合框): 如果我(在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 :(得分:0)

试试这个...删除你的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}"   ... />