Да, это возможно. Вы можете создать и <ItemTemplate>
, который содержит как «нормальное» представление элемента, так и индикатор выполнения. Изначально вы устанавливаете Visibility
индикатора выполнения на Collapsed
. Когда начинается загрузка, вы меняете Visibility
на Visible
(вы также можете свернуть другие части элемента).
Вы можете привязать свойство Visibility
к свойству модели представления элемента. Вы можете использовать логическое свойство, такое как IsDownloading
, а затем связать через конвертер, который преобразует true
в Visible
и false
в Collapsed
.
Чтобы показать индикатор выполнения, просто установите для IsDownloading
значение true и запустите событие PropertyChanged
. После завершения загрузки вы устанавливаете IsDownloading
в false и снова запускаете событие PropertyChanged
.
Вот примерный набросок того, как вы можете это сделать. Вам необходим класс модели представления для вашего элемента в ListView
, к которому вы можете привязать данные:
class Item : INotifyPropertyChanged {
public String Name { ... }
public Double Progress { ... }
public Boolean IsDownloading { ... }
...
}
Вам также нужен IValueConverter
, который может конвертировать Boolean
в Visibility
:
class VisibilityConverter : IValueConverter {
public Boolean Invert { get; set; }
Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
var visible = Convert.ToBoolean(value) ^ Invert;
return visible ? Visibility.Visible : Visibility.Collapsed;
}
Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
throw NotImplementedException();
}
}
Ваше мнение должно основываться на чем-то вроде этого:
<ListBox
<ListBox.Resources>
<local:VisibilityConverter x:Key="VisibilityConverter"/>
<local:VisibilityConverter x:Key="InverseVisibilityConverter" Invert="True"/>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock
Text="{Binding Name}"
Visibility="{Binding IsDownloading, Converter={StaticResource InverseVisibilityConverter}}"/>
<ProgressBar
Value="{Binding Progress}"
Visibility="{Binding IsDownloading, Converter={StaticResource VisbilityConverter}}"/>
</Grid>
<DataTemplate>
</ListBox.ItemTemplate>
</ListBox>