2013-08-01 64 views
1

我在我的ListView控件上使用自定义样式。当用户点击ListView中的一个项目时,我开始下载一个文件,id喜欢更新该特定ListViewItem上的进度条。下面是我使用的样式:Windows应用商店应用:以编程方式访问ListView中的样式

<DataTemplate x:Key="UpdatesListViewItemTemplate"> 
    <Grid Height="80"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="6*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <StackPanel Margin="5,0,10,5"> 
      <TextBlock Text="{Binding Name}" Style="{StaticResource ListViewTitleTextStyle}" TextWrapping="NoWrap" Margin="0, 2"/> 
      <TextBlock Text="{Binding Description}" Style="{StaticResource ListViewDetailTextStyle}" TextWrapping="NoWrap" Margin="0, 2"/> 
      <TextBlock Text="{Binding Date}" Style="{StaticResource ListViewDetailTextStyle}" TextWrapping="NoWrap" Margin="0, 2"/> 
     </StackPanel> 
     <ProgressBar x:Name="progressBar" Grid.Column="1" Margin="5, 0" /> 
    </Grid> 
</DataTemplate> 

这里有一些事情我已经尝试:

  • 绑定一个名为DownloadProgress进度条的Value属性属性。有没有一种方法可以更新特定的ListViewItem,以便重新获取Binding值?
  • 尝试从传入ItemClick方法的sender对象访问ListViewItem。我找不到任何返回ListViewItem的属性/方法。

我完全没有想法。任何帮助表示赞赏。谢谢。

回答

0

ListView中的每个项目使用ViewModel。因此,而不是ObservableCollection<Model>,使其ObservableCollection<DownloadableContentViewModel<Model>>

然后,在此ViewModel中,输入ProgressBar的值,例如是否应显示ProgressBar以及该值应为多少。通过类似WrappedItem属性的方式公开您的Model

您的Bindings将更改为Text="{Binding WrappedItem.Name}",但在其他方面的工作方式相同。

另外,您应该在WrapperViewModel的内部放置一个Command,它开始下载并执行该逻辑。然后,您可以将其绑定到您的ListViewItem中的一个按钮。

希望这会有所帮助,快乐的编码!

相关问题