私は GUI プログラミング、IronPython、WPF、および .NET の初心者です。しかし、私はPythonにかなり精通しています。DevHawk などのデータバインディングに関する多くのチュートリアルを読みましたが、これらは私には高度すぎます。
問題: リストボックス コントロールに、エントリの変更、追加、または削除が可能な Python リストからのファイル パスを表示したいと考えています。チュートリアルに従って達成した最初の部分。
ただし、ファイルリストを更新すると、リストボックスコントロールは新しいファイルで更新されず、リストボックスを操作しようとすると、VS2012 からの次のデバッグメッセージでアプリが除外されます:
ファイルを追加 ['C:\test\Employment_Law_Alert_03_28_2012.pdf', 'C:\test\Graph Paper .10in Cartesian ci-110.pdf', 'C:\test\Greek Alphabet Symbol.pdf', 'C:\ test\CNN Money Tipping Guide - How much to Tip.pdf']
トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、SystemError: ItemsControl が項目ソースと矛盾しています。詳細については、内部例外を参照してください。
明らかに、listbox.ItemSource は Python リストと同期していません。1つは2つをどのように更新しますか?
以下はサンプルコードです...
パイソン:
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>
更新:回避策が1つ見つかりましたが、もっと良い方法はありますか?
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.