我遇到了以下代码的问题:
FolderBrowserDialog ofd = new FolderBrowserDialog();
ofd.Description = "Wählen Sie bitte den Ordner mit den Videodateien die Sie verschieben und umbenennen wollen...";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
string path = ofd.SelectedPath;
foreach (var file in Directory.GetFiles(path)) {
files.Add(new FileStatus(file, new FileInfo(file).Length));
}
}
FileStatus对象的代码是:
public FileStatus(string filename, long filesize, long currentsize = 0) {
this.currentsize = currentsize;
this.filename = filename;
this.filesize = filesize;
}
public string filename { get; set; }
public long filesize { get; set; }
public long currentsize { get; set; }
public double percent {
get {
return (currentsize / filesize) * 100;
}
}
ListView的XAML是:
<ListView Name="lb_data" Grid.Row="2" DataContext="{Binding}" ItemTemplate="{StaticResource fileStatusTemp}">
</ListView>
fileStatusTemp的XAML:
<DataTemplate x:Key="fileStatusTemp">
<StackPanel>
<TextBlock Text="{Binding Path=filename}" ></TextBlock>
</StackPanel>
</DataTemplate>
ItemSource-property在窗口的构造函数中设置:
lb_data.ItemSource = files;
感谢KDiTraglia,建议:) 所以问题在于,当我运行此代码时,它不会显示文件名。它什么都没显示。 在另一个项目中,一段类似的代码可以正常工作...... 我希望你能帮助我:) 问候Knerd
答案 0 :(得分:2)
您在列表视图中缺少itemssource =“{binding ??}”。我也怀疑这条线是否按照您的意图工作......
DataContext="{Binding}"
编辑:
我把这一切都复制到一个测试项目中,它运行正常,这是我整个项目的逐字记录,也许我做了一些小事。
dowhilefor对INotifyPropertyChanged提出了一个很好的观点,我的代码在加载时工作,但如果文件是从构造函数以外的事件添加的话,则无法工作。要轻松解决这个问题,只需将List更改为ObservableCollection(不要忘记包含'using System.Collections.ObjectModel')。我在下面更新了我的代码。
public partial class MainWindow : Window
{
public ObservableCollection<FileStatus> files { get; set; }
public MainWindow()
{
InitializeComponent();
files = new ObservableCollection<FileStatus>();
lb_data.ItemsSource = files;
FolderBrowserDialog ofd = new FolderBrowserDialog();
ofd.Description = "Wählen Sie bitte den Ordner mit den Videodateien die Sie verschieben und umbenennen wollen...";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = ofd.SelectedPath;
foreach (var file in Directory.GetFiles(path))
{
files.Add(new FileStatus(file, new FileInfo(file).Length));
}
}
}
}
-
<Window x:Class="WPFtest5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="fileStatusTemp">
<StackPanel>
<TextBlock Text="{Binding Path=filename}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListView Name="lb_data" ItemTemplate="{StaticResource fileStatusTemp}"/>
</Window>
-
public class FileStatus
{
public FileStatus(string filename, long filesize, long currentsize = 0)
{
this.currentsize = currentsize;
this.filename = filename;
this.filesize = filesize;
}
public string filename { get; set; }
public long filesize { get; set; }
public long currentsize { get; set; }
public double percent
{
get
{
return (currentsize / filesize) * 100;
}
}
}