У меня есть DataGrid, который заполняет данные из ViewModel асинхронным методом. Мой DataGrid:
<DataGrid ItemsSource="{Binding MatchObsCollection}" x:Name="dataGridParent"
Style="{StaticResource EfesDataGridStyle}"
HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Cursor="Hand" AutoGenerateColumns="False"
RowDetailsVisibilityMode="Visible" >
Я использую http://www.amazedsaint.com/2010/10/asynchronous-delegate-command-for-your.html для реализации асинхронного способа в моей модели просмотра.
Вот мой код viewmodel:
public class MainWindowViewModel:WorkspaceViewModel,INotifyCollectionChanged
{
MatchBLL matchBLL = new MatchBLL();
EfesBetServiceReference.EfesBetClient proxy = new EfesBetClient();
public ICommand DoSomethingCommand { get; set; }
public MainWindowViewModel()
{
DoSomethingCommand = new AsyncDelegateCommand(
() => Load(), null, null,
(ex) => Debug.WriteLine(ex.Message));
_matchObsCollection = new ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC>();
}
List<EfesBet.DataContract.GetMatchDetailsDC> matchList;
ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC> _matchObsCollection;
public ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC> MatchObsCollection
{
get { return _matchObsCollection; }
set
{
_matchObsCollection = value;
OnPropertyChanged("MatchObsCollection");
}
}
//
public void Load()
{
matchList = new List<GetMatchDetailsDC>();
matchList = proxy.GetMatch().ToList();
foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
_matchObsCollection.Add(match);
}
}
Как вы можете видеть в моем методе Load() в моей модели ViewModel, сначала я получаю matchList (который является списком класса DataContract) из моего сервиса. Затем через цикл foreach я вставляю элементы matchList в свой _matchObsCollection (который это ObservableCollection of DataContract Class)). Теперь я получаю вышеуказанную ошибку (как показано в заголовке). "Этот тип CollectionView не поддерживает изменения в SourceCollection из потока, отличного от потока Dispatcher",
Может ли кто-нибудь предложить мне какое-либо решение. Если возможно, мне хотелось бы знать, как связать мой DataGrid в представлении, а также обновлять его асинхронно, если есть лучший способ.