J'essaie d'écrire un éditeur de carte 2D simple. Voici mon code jusqu'à présent. Comment puis-je coder la classe UserControl qui se lie à une carte? Je n'arrive pas à trouver un exemple de UserControl qui gère le ItemsSource comme le font ListBox et DataGrid. Je pense que j'ai besoin de savoir quand ItemsSource est défini, puis écrire du code qui s'abonne à CollectionChanged et PropertyChanged et crée/supprime/positionne les images? Devrais-je même essayer de le faire quand j'ai 3 ObservableCollections à lier?Comment créer un UserControl pouvant être lié à un objet ItemsSource ou DataContext?
public class Map
{
public ObservableCollection<ObservableCollection<MapSquare>> Squares
= new ObservableCollection<ObservableCollection<MapSquare>>();
}
public class MapSquare
{
public ObservableCollection<MapTile> Items = new ObservableCollection<MapTile>();
}
public class MapTile : INotifyPropertyChanged
{
private CroppedBitmap bmp;
public CroppedBitmap Bitmap {
get{return bmp;}
set{ bmp = value; OnPropertyChanged("Bitmap");}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Je pensais que j'allais simplement avoir besoin de créer/supprimer/mettre à jour des éléments - mais après une implémentation rapide (sans utiliser MVVM), je découvre que je vais définitivement avoir besoin de virtualisation. Chargement/modification d'une grille de 50x100 Les images sont très très lentes. Je vais mettre une grande toile à l'intérieur d'un ScrollViewer et dans l'événement OnScroll je vais créer/supprimer des images afin que seul ce qui serait à l'écran soit réellement là. –