我有一个带有项目的列表框,我使用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>
感谢
答案 0 :(得分:0)
是的,有可能。您可以创建并<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
的{{1}}:
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();
}
}