2

私は 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.
4

1 に答える 1

0

ListBoxコレクションに新しいアイテムが追加されたときに更新する場合は、ItemsSourceを使用する必要がありますObservableCollection<T>または、手動で更新を強制することもできますが、特に項目が多い場合は、はるかに遅くなります。

于 2013-07-07T02:52:21.143 に答える