#c# #wpf #mvvm #model #bitmap
#c# #wpf #mvvm #Модель #bitmap
Вопрос:
Я пишу простое приложение WPF с использованием MVVM. Какой класс наиболее удобен для извлечения растровых изображений из моделей и дальнейшей привязки данных: Bitmap, BitmapImage, BitmapSource?
public class Student
{
public <type?> Photo
{
get;
}
}
Или, может быть, я могу каким-то образом преобразовать Bitmap в BitmapSource, используя ViewModel?
Комментарии:
1. Что вы подразумеваете под удобным?
Ответ №1:
Я всегда использую BitmapImage
, он довольно специализированный и предлагает приятные свойства и события, которые могут быть полезны (например, IsDownloading
, DownloadProgress
amp; DownloadCompleted
).
Ответ №2:
Я полагаю, что более гибким способом является возврат photo (или любого другого растрового изображения) в виде потока. Кроме того, если фотография была изменена, модель должна запустить событие photo changed, а клиент должен обработать событие photo changed, чтобы получить новую фотографию.
public class PhotoChangedEventArgs : EventArgs
{
}
public class Student
{
public Stream GetPhoto()
{
// Implementation.
}
public event EventHandler<PhotoChangedEventArgs> OnPhotoChanged;
}
public class StudentViewModel : ViewModelBase
{
// INPC has skipped for clarity.
public Student Model
{
get;
private set;
}
public BitmapSource Photo
{
get
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = Model.Photo;
image.EndInit();
image.Freeze();
return image;
}
}
public StudentViewModel(Student student)
{
Model = student;
// Set event handler for OnPhotoChanged event.
Model.OnPhotoChanged = HandlePhotoChange;
}
void HandlePhotoChange(object sender, PhotoChangedEventArgs e)
{
// Force data binding to refresh photo.
RaisePropertyChanged("Photo");
}
}