Прогрессбар в списке элементов - PullRequest
0 голосов
/ 23 января 2012

я получил список с элементами и использую табличку с данными для отображения элементов

Я хочу сделать кнопку загрузки, как только пользователь выберет элемент и нажмет кнопку, индикатор прогресса будет добавлен к выбранному.Элемент datatemplate и будет отображать прогресс загрузки, это возможно?

помогут любые указатели

 <ListBox Name="List" Grid.Row="2" 
                 ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 ScrollViewer.VerticalScrollBarVisibility="Disabled"  
                 ItemTemplate="{StaticResource ListTemplate}" 
                 ItemsSource="{Binding Path=Items}" 
                 SelectedItem="{Binding Path=SelectedItem}"
                 ItemContainerStyle="{StaticResource RoundedItem}" 
                 BorderBrush="{x:Null}" BorderThickness="0" 
                 Background="{x:Null}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Margin="10" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

спасибо

1 Ответ

0 голосов
/ 23 января 2012

Да, это возможно. Вы можете создать и <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...