2013-07-06 6 views
1

Принесите меня, я новичок в программировании GUI, IronPython, WPF и .NET. Тем не менее, я довольно хорошо знаком с Python. Я прочитал много руководств относительно привязки данных, таких как DevHawk, но они слишком продвинуты для меня.Простая компоновка списков в IronPython и WPF

Проблема: Я хочу отображать в Listbox управлять путями файлов из списка python, которые могут быть изменены, добавлены или удалены записи. Первая часть, которую я выполнил после уроков.

Listbox with files listed

Однако, когда я обновляю список файлов, управления ListBox не обновляется новыми файлами и при попытке манипулировать ListBox в приложение excepts со следующим сообщением отладки из VS2012:

Add File Click ['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 - How Much to Tip.pdf']

Traceback (most recent call last): File "", line 1, in SystemError: An ItemsControl is inconsistent with its items source. See the inner exception for more information.

Очевидно, что 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> 

UPDATE: Я нашел одну работу вокруг, но, безусловно, есть лучший способ?

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

Если вы хотите ListBox обновить, когда новые элементы добавляются в ItemsSource коллекции, вам нужно использовать ObservableCollection<T>. Кроме того, вы можете force an update manually, но он будет намного медленнее, особенно если есть много предметов.

Смежные вопросы