Windows应用商店应用:以编程方式从ListView中的样式访问控件

时间:2013-08-01 14:20:09

标签: c# windows-8 windows-store-apps winrt-xaml

我在ListView控件上使用自定义样式。当用户单击ListView中的项目时,我开始下载文件,id就像更新该特定ListViewItem上的进度条。这是我正在使用的风格:

<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的属性/方法。

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

1 个答案:

答案 0 :(得分:0)

ViewModel中的每件商品使用ListView。因此,不要使用ObservableCollection<Model>,而是将其设为ObservableCollection<DownloadableContentViewModel<Model>>

然后,在此ViewModel中,输入ProgressBar的值,例如是否应显示ProgressBar以及值应该是什么。通过类似Model属性的内容展示您的WrappedItem

您的Bindings将更改为Text="{Binding WrappedItem.Name}",否则将以相同的方式运作。

此外,您应该在Command Wrapper内置ViewModel,开始下载并执行该逻辑。然后,您可以将其绑定到ListViewItem内的按钮。

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