我是 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 回调将一个项目从视图模型添加到集合中:
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 集合?
您的帮助将是一个很大的帮助!!!谢谢!