Ich versuche, einen einfachen 2D-Karteneditor zu schreiben. Hier ist mein Code soweit. Wie programmiere ich die UserControl-Klasse, die an eine Zuordnung bindet? Ich kann nicht scheinen, ein Beispiel eines UserControl zu finden, das die ItemsSource wie das eingebaute ListBox und das DataGrid behandelt. Ich denke, ich muss herausfinden, wenn ItemsSource gesetzt wird und dann Code schreiben, der CollectionChanged und PropertyChanged abonniert und Images erstellt/löscht/positioniert? Sollte ich das überhaupt versuchen, wenn ich 3 ObservableCollections habe, an die ich mich binden kann?Wie erstelle ich ein UserControl, das an eine ItemsSource oder DataContext binden kann?
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));
}
}
}
Ich dachte, ich müsste nur Elemente erstellen/löschen/aktualisieren - aber nach einer schnellen Implementierung (ohne MVVM) entdecke ich, dass ich definitiv Virtualisierung brauche. Laden/Ändern eines Rasters von 50x100 Bildern ist sehr, sehr langsam. Ich werde eine große Leinwand in einen ScrollViewer einfügen und im OnScroll-Event werde ich Bilder erstellen/entfernen, so dass nur das vorhanden ist, was auf dem Bildschirm angezeigt wird. –