アップデート2C#/ WPFデータバインディングとbackgroundworkers
いくつかのものがたくさん明確になったので、私は、全体の質問を書き換えましたが、問題は今、私は別のスレッドでDependencyPropertiesのリストを作成したことのようですDependencyPropertiesが使用される場所:(。
私はXAML
バインディングはArgumentException
を引き起こすBackgroundWorker
上のいくつかの作業を行うときよりもはDependencyObjectのと同じスレッド上でDependencySourceを作成する必要があります。私はいくつかのint型、リストのと辞書が含まれている
INotifyPropertyChanged
を実装する単純なクラスを持っている:
私は次のセットアップを持っています。 Calculator
に私は複数のバインディングを持っているUserControl
のXAML
ファイルで
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate(object o, DoWorkEventArgs args)
{
lock (Calculator)
{
Calculator.Calculate();
}
};
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
:それは多くの時間を取ることができますので、私は、Calculate
方法を実行するためにBackgroundWorker
を使うUserControl
で
public class Calculator : INotifyPropertyChanged
{
//Note that InstanceGroup is a dependency object
private List<InstanceGroup> instanceGroups = new List<InstanceGroup>();
public List<InstanceGroup> InstanceGroups
{
get { return instanceGroups; }
set { instanceGroups = value; }
}
// snip //
public void Calculate()
{
InstanceGroups = MyNewFilledInstanceGroup;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("instanceGroups"));
}
}
}
、{Binding Path=Calculator.InstanceGroups, Path=userControlName}
のような。私はあなたが使用する必要があることを確信していないです
Hev Anvarbek、ObservableCollectionをObservableCollectionに通常のList <>で置き換えましたが、問題は解決しません。 –