0

私はこれ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);
}

したがって、この時点以降、リストにファイルを追加しても何も起こりません。

4

1 に答える 1

0

上記のコードを使用して、説明した問題を再現できました。問題は、WPF がフィールドにバインドできないことです。詳細については、この質問を参照してください。必要なことはObservableCollection<MyData>、メイン フォームのコード ビハインドをフィールドではなくプロパティに変更することだけです。

public partial class MainWindow : Window
{
    public ObservableCollection<MyData> Files { get; private set; }
于 2015-11-13T08:52:20.463 に答える