组合框中的项目列表存在问题。当重新加载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
它有效
答案 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}" ... />