2017-02-25 72 views
1

我的XAML:如何引用WPF嵌套ListView中的控件?

<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 [email protected]}"/> 
        <TextBlock x:Name="AlbumArtist" Text="{Binding [email protected]}"/> 
        <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 [email protected]}"/> 
            <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下載每個軌道。我如何參考進度條?

(進度條)lvAlbums [curAlbum] .lvTracks [curTrack] .spTrack [ 「PB1」]

類似的東西。

回答

0

嘗試引用的進度控制,我只是數據綁定到它和更新的數據:

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

按預期工作。

0

請看看這對你的作品:與其

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

我已經試過類似的東西。我得到一個模板錯誤:「此操作僅適用於應用此模板的元素。」 – Chris

+0

此外,這並沒有給我一個特定的進度條。例如,我有3張專輯,每張專輯有10首曲目,每首曲目都有自己的進度條。 用戶看到相冊和曲目列表,然後 - 爲了爭辯 - 點擊「下載」按鈕。我的代碼循環遍歷XML,獲取第一張專輯和第一首曲目並將其下載到異步。在下載過程中,我想更新與該ablum/track組合相關的相應進度欄。 – Chris