私は C# と WPF でのプログラミングの初心者でListView
、すべてのアイテムがバインドされた 2 つのファイル マネージャーを作成しています。ファイル/フォルダーのアイコンとその名前が必要なため、いくつListView
かGridViewColumn
の s があり、最初に持っています。CellTemplate
はCellTemplate
:
<DataTemplate x:Key="IconTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Path=itemIcon}" Width="20" Grid.Column="0"/>
<TextBlock Grid.Column="1" Text="{Binding Path=itemName}" />
</Grid>
</DataTemplate>
そして、すべてのディレクトリとファイルがコレクションに追加され、すべてのファイルのアイコンがファイルから変換される ObservableCollection という 1 つの Class がありました。MyItem クラスには、名前、拡張子などのいくつかの文字列と、それらのアイコン用の 1 つの ImageSource が含まれています。それらのアイコンを変換するために、異なるファイルを含むいくつかのフォルダーがプログラムをフリーズすることに気付くまで、すべてうまくいきました。だから今、私はすべてのファイルにいくつかの一般的なアイコンをバインドしてから、別のスレッドで変換して変更したいと考えています。そのため、メインクラスでアイテムのグローバル ObservableCollection を作成しましたが、listView からアイテムをロードする方法がわからないため、塗りつぶし Collection 関数を Observable クラスからメインクラスに移動しました。今私は' 新しいスレッドからリストビューの項目を変更できますが、最終的に問題が発生します-XamlParseExceptionが発生します-DependencyObjectと同じスレッドでDependencySourceを作成する必要があります。ファイルの名前(文字列)を変更しようとすると、完全に機能しました(これまでのところ、ボタンのクリックでのみテストしています)!インターネットで見つけた参照に従って、依存関係オブジェクトを MyItem クラスに実装しようとしましたが、うまくいきませんでした。この変化するアイコン機能。
for (int i = leftDirectories.Length; i < (leftDirectories.Length + leftFiles.Length); i++)
{
FileToImageIconConverter some = new FileToImageIconConverter(locationLeft + leftFiles[i - leftDirectories.Length].Name);
ImageSource imgSource = some.Icon;
leftFilesLoad[i].itemIcon = imgSource;
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
{
contentLeft.Items.Refresh();
}
);
かなり長い記事で、stackoverflow は具体的に言う:-D. みんな助けてくれて本当にありがとう。返信をお待ちしております。必要なすべてのコードをお見せする準備ができています。