IronPython和WPF中的简单列表框数据绑定

时间:2013-07-06 23:33:22

标签: wpf windows user-interface listbox ironpython

请耐心等待,我是GUI编程,IronPython,WPF和.NET的新手。但是,我对Python非常熟悉。我已阅读了许多关于数据绑定的教程,例如DevHawk,但这些对我来说太先进了。

问题:我想在Listbox控件中显示python列表中可以修改,添加或删除条目的文件路径。我按照教程完成了第一部分。

Listbox with files listed

但是,当我更新文件列表时,列表框控件不会使用新文件进行更新,当我尝试操作列表框时,应用程序除了来自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.

1 个答案:

答案 0 :(得分:0)

如果您希望ListBox在将新项目添加到ItemsSource集合时进行更新,则需要使用ObservableCollection<T>。或者,您可以force an update manually,但速度要慢得多,特别是如果有很多项目。