【问题标题】:How do I refer to a control in a WPF nested ListView?如何引用 WPF 嵌套 ListView 中的控件?
【发布时间】:2017-07-16 00:24:57
【问题描述】:

我的 XAML:

<ListView x:Name="lvAlbums" ItemsSource="{Binding XPath=/downloads/Album}" SelectionMode="Multiple">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="spAlbum">
                    <!-- Displays first level attributes -->
                    <TextBlock x:Name="AlbumName" Text="{Binding XPath=@Name}"/>
                    <TextBlock x:Name="AlbumArtist" Text="{Binding XPath=@Artist}"/>
                    <ListView x:Name="lvTracks" ItemsSource="{Binding XPath=Item}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <StackPanel x:Name="spTrack">
                                    <!-- Displays the second level attributes -->
                                    <TextBlock x:Name="trackName" Text="{Binding XPath=@Name}"/>
                                    <ProgressBar x:Name="pb1" Minimum="0" Maximum="100" Height="5px" Margin="0,0,0,0"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </StackPanel>
            </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

它可以从 xml 文件中很好地填充。我有一张专辑,下面列出了曲目和每首曲目的进度条。

我现在正在循环通过 XML 下载每个曲目。如何参考进度条?

(ProgressBar)lvAlbums[curAlbum].lvTracks[curTrack].spTrack["pb1"]

类似的东西。

【问题讨论】:

    标签: c# wpf listview progress-bar controls


    【解决方案1】:

    请看看这是否适合你:

    var innerListView = lvAlbums.ItemTemplate.FindName("lvTracks", lvAlbums) as ListView;
    ProgressBar pbar = innerListView.ItemTemplate.FindName("pb1", innerListView ) as ProgressBar;
    

    【讨论】:

    • 我已经尝试过类似的方法。我收到一个模板错误:“此操作仅对应用了此模板的元素有效。”
    • 另外,这并没有给我进度条的具体出现。例如,我有 3 张专辑,每张专辑有 10 首曲目,每首曲目都有自己的进度条。用户看到专辑和曲目列表,然后——为了争论——点击“下载”按钮。我的代码循环通过 XML,获取第一张专辑和第一首曲目并异步下载。在下载过程中,我想更新与该 ablum/track 组合相关的相应进度条。
    【解决方案2】:

    我没有尝试引用进度条控件,而是简单地将数据绑定到它并更新数据:

    <ProgressBar x:Name="pb1" Value="{Binding XPath=@Progress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Minimum="0" Maximum="100" Height="5px" Margin="0,0,0,0" Width="145"/>
    

    按预期工作。

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 2014-02-18
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多