InitializeComponentsの後のMy Windowコンストラクタで、オブジェクトを作成してDataGridにバインドする必要があります。オブジェクトの作成には時間がかかりすぎるため、ウィンドウの表示に時間がかかります。そこで私は、オブジェクトの作成をバックグラウンドスレッドに移し、dispatcher.invokeを実行してバインディングを実行することによって、UIスレッドに「委譲する」ことにしました。しかしこれは失敗する。WPF:UIスレッドとバックグラウンドスレッド間のオブジェクトの受け渡し
Dispatcher.invoke内にある矩形の可視性を設定しようとすると奇妙なことになりますが、それは動作しますがDataGrid.setbindingは機能しません!何か案は?バックグラウンドワーカーとthreadstartで同じことを試しましたが、同じエラーが発生しています。ディスパッチャ内で起きたことがデリゲートを呼び出すにもかかわらず、DataGridオブジェクトにアクセスできません。これがどういう仕組みか分かりません。どんな提案も大歓迎です。ありがとう!
StartupDelegate s = new StartupDelegate(CreateModel);
s.BeginInvoke(delegate(IAsyncResult aysncResult) { s.EndInvoke(aysncResult); }, null);
internal CreateModel()
{
Model d = new Model();
Dispatcher.Invoke(DispatcherPriority.Normal,
new Action<Model>(
delegate(Model d1)
{
mModel = d1; // mModel is a property defined in Window
Binding b = new Binding();
b.Source = mModel;
MainDataGrid.SetBinding(TreeView.ItemsSourceProperty, mainb); // << dies here with - The calling thread cannot access this object because a different thread owns it.
}
}
UPDATE: だけ一度に実行しますdispatchertimerを使用して終了。バインディングコードをTick代理人に渡すことができました。しかし、私はまだ上記のコードdoesntの理由が不思議です。
私はxamlではなく、nullにinitedプロパティを持つプロパティへのバインディングを設定しようとしました。そのため、デリゲートには1つの行mModel = d1しかありませんでした。しかし、何も起こらなかった。依存関係プロパティではなく、notifypropertychangedを実装する通常のプロパティです。 – Sharun
オブジェクトがDependencyObjectから派生している(ウィンドウがある)場合、INotifyPropertyChangedは機能しません。同様の問題があっても、なぜDependencyPropertyに変更したのでしょうか? –