私は WPF、MVVM、そしてもちろん MVVMLight の初心者です。私のプロジェクトにとって非常に重要なことを教えてください。ビュー モデルから作成された別のスレッドからビュー内のコレクションを更新する必要があります。私のViewModelはViewについて全く知りません。ビューモデルで定義された監視可能なコレクションがあります。
public class LoginViewModel: ViewModelBase
{
public ObservableCollection<DatabaseConfiguration> DatabaseConfigurations{ get; set; }
private DatabaseConfiguration _dbConfig;
public DatabaseConfiguration DbConfig
{
get{return _dbConfig;}
set
{
_dbConfig=value;
RaisePropertyChanged(()=>DbConfig);
}
}
System.threading.Task コールバックを使用して、viewmodel からコレクションにアイテムを追加します。
void AddDBConfig(DatabaseConfiguration config)
{
Task<bool> asyncTask = Task.Factory.StartNew<bool>(
() =>
{
return DatabaseUtility.ValidateDatabaseConnectionConfiguration(config);
});
ExecuteAsync(asyncTask,
(IAsyncResult ar) =>
{
Task<bool> t1 = (Task<bool>)ar;
if (!t1.IsFaulted)
{
if (!(bool)result)
{
//problematic statement
DatabaseConfigurations.Add(config);
}
}
});
}
public void ExecuteAsync(Task<object> asyncTask, AsyncCallback callback)
{
asyncTask.ContinueWith(task => callback(asyncTask));
asyncTask.Start();
}
}
実行時に次のエラーが発生します。
「このタイプの CollectionView は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」
MVVMLight ツールキットに別のスレッドから UI コレクションを更新するための回避策または組み込みのメカニズムはありますか?
あなたの助けは大きな助けになるでしょう!!! ありがとう!