私は単純な2Dマップエディタを作成しようとしています。これまでのところ私のコードです。マップにバインドするUserControlクラスをコーディングするにはどうすればよいですか? ListBoxとDataGridに組み込まれているようなItemsSourceを処理するUserControlの例は見当たりません。私は、ItemsSourceがいつ設定されるのかを知り、CollectionChangedとPropertyChangedを購読し、Imagesを作成/削除/位置づけるコードを書く必要があると思っていますか? 3 ObservableCollectionsをバインドするときに私はこれをやろうとしているべきですか?ItemsSourceまたはDataContextにバインドできるUserControlを作成するにはどうすればよいですか?
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));
}
}
}
私はアイテムを作成/削除/更新する必要があると思っていましたが、すぐに実装した後(MVVMを使用しないで)、私は仮想化が必要であることを発見しました。 50x100画像のグリッドのロード/変更は非常に遅いです。私は大きなキャンバスをScrollViewerの中に入れ、OnScrollイベントでは画像を作成/削除して、画面上に表示されるものだけが実際にそこにあるようにします。 –