请耐心等待,我是GUI编程,IronPython,WPF和.NET的新手。但是,我对Python非常熟悉。我已阅读了许多关于数据绑定的教程,例如DevHawk,但这些对我来说太先进了。
问题:我想在Listbox控件中显示python列表中可以修改,添加或删除条目的文件路径。我按照教程完成了第一部分。
但是,当我更新文件列表时,列表框控件不会使用新文件进行更新,当我尝试操作列表框时,应用程序除了来自VS2012的以下调试消息之外:
添加文件单击['C:\ test \ Employment_Law_Alert_03_28_2012.pdf', 'C:\ test \ Graph Paper .10in Cartesian c-i-110.pdf','C:\ test \ Greek Alphabet Symbol.pdf','C:\ test \ CNN Money Tipping Guide - 多少钱 Tip.pdf']
Traceback(最近一次调用最后一次):文件“”,第1行,in SystemError:ItemsControl与其项目不一致 资源。有关详细信息,请参阅内部异常。
显然,listbox.ItemSource与python列表不同步。如何更新这两个?
以下是示例代码......
的Python:
def addFile(self, sender, e):
... # Some files added to self.fileInList
self.listBoxPDFs.ItemsSource = self.fileInList
XAML:
<ListBox x:Name="listBoxPDFs" Margin="2, 2, 2, 2">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding BindsDirectlyToSource=True}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
更新:我找到了一个解决方法,但肯定有更好的方法吗?
def addFile(self, sender, e):
... # Some files added to self.fileInList
self.listBoxPDFs.ItemsSource = [] # Clear the listbox first.
self.listBoxPDFs.ItemsSource = self.fileInList # Then rebind.
答案 0 :(得分:0)
如果您希望ListBox
在将新项目添加到ItemsSource
集合时进行更新,则需要使用ObservableCollection<T>
。或者,您可以force an update manually,但速度要慢得多,特别是如果有很多项目。