我有Singleton
这个ObservableCollection<MyData>
作为成员:
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
public ObservableCollection<MyData> Files { get; private set; }
private Singleton()
{
Files = new ObservableCollection<MyData>();
}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
主要表格类的声明:
ObservableCollection<MyData> Files;
在构造函数之后:
Files= Singleton.Instance.Files;
XAML:
<ListView ItemsSource="{Binding Files}" />
现在,当用户选择我要检查每个文件的文件时:
private static void Check(IEnumerable<string> files)
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
Task task = Task.Factory.StartNew(() =>
{
try
{
Parallel.ForEach(files,
new ParallelOptions
{
MaxDegreeOfParallelism = 1
},
file =>
{
ProcessFile(file);
});
}
catch (Exception)
{ }
}, tokenSource.Token,
TaskCreationOptions.None,
TaskScheduler.Default).ContinueWith
(t =>
{
}
, TaskScheduler.FromCurrentSynchronizationContext()
);
}
和
private static void ProcessFile(string file)
{
// Lets assume that i want to add this file into my `ListView`
MyData data = new .....
Singleton.Instance.Files.Add(data);
}
所以在此之后,当我将文件添加到我的列表中时,没有任何事情发生。
答案 0 :(得分:0)
使用上面的代码,我能够重现您描述的问题。
问题是WPF无法绑定到字段,有关详细信息,请参阅此question。您需要做的就是将主窗体后面代码中的ObservableCollection<MyData>
更改为属性而不是字段。
public partial class MainWindow : Window
{
public ObservableCollection<MyData> Files { get; private set; }