J'ai une grille de données qui remplit des données à partir du ViewModel par une méthode asynchrone :
<DataGrid ItemsSource="{Binding MatchObsCollection}" x:Name="dataGridParent"
Style="{StaticResource EfesDataGridStyle}"
HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Cursor="Hand" AutoGenerateColumns="False"
RowDetailsVisibilityMode="Visible" >
J'utilise http://www.amazedsaint.com/2010/10/asynchronous-delegate-command-for-your.html pour mettre en œuvre une méthode asynchrone dans mon modèle de vue.
Voici le code de mon 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);
}
}
Comme vous pouvez le voir, dans la méthode Load() de mon ViewModel, je récupère d'abord matchList (qui est une liste d'une classe de contrat de données) à partir de mon service, puis, par une boucle foreach, j'insère les éléments de ma matchList dans ma _matchObsCollection (qui est une ObservableCollection de la classe de contrat de données)).
De plus, si possible, j'aimerais savoir comment lier ma grille de données dans la vue et la rafraîchir de manière asynchrone, s'il existe un meilleur moyen.