Я борюсь с проблемой WPF MVVM, используя элемент управления, который имеет вспомогательные функции и предоставляет эти вспомогательные функции моим моделям просмотра.
Я использую элемент управления просмотрщика PDFTron, который показывает объект PDFDocument. Элементы в этом PDF-документе указаны в терминах структуры PDFTron.Rect с элементами, измеренными в точках (1/72 дюйма), и номером страницы
Чтобы помочь преобразовать системы координат в положение экрана и обратно, PDFTron ViewerControl имеет различные функции на себе.
например, чтобы преобразовать из точки экрана
Double x, y;
int page = Control.GetPageNumberFromScreenPt(x, y);
Control.ConvScreenPtToPagePt(ref x, ref y, page);
преобразовать в точку экрана из исследуемого объекта
PDFTron.Rect r = Control.GetScreenRectForAnnot(embeddedObject, pageNumber);
Что лучший способ вызова / отображения или привязки к таким функциям, как эта между моделью (ами) представления и элементом управления PDF, поскольку я действительно хотел бы привязать данные к координатам.
Например, у меня есть украшение, определенное в XAML, которое позволяет мне перемещать изображение, которое я прочитал из встроенного объекта о странице, путем перетаскивания, и я также могу изменять размер изображения. Модель представления знает, как моя модель представления знает изображение встроенного объекта, его страницу и прямоугольник на этой странице, но как координаты PDF. Но это необходимо преобразовать в экранные координаты для X, Y, ширины и высоты для привязки к атрибутам XAML. Я не совсем понимаю, как это сделать, так как это выходит за рамки преобразователя данных.
Таким образом, элемент управления в xaml имеет атрибуты, измеряемые в единицах экрана
AdornerLeft="{Binding Data.X, Mode=TwoWay}"
AdornerTop="{Binding Data.Y, Mode=TwoWay}"
AdornerWidth="{Binding Data.Width, Mode=TwoWay}"
AdornerHeight="{Binding Data.Height, Mode=TwoWay}"
Если X и Y меняются, мне нужно, чтобы это изменение в конечном итоге отразилось как координаты страницы, x, y зрителя, поскольку они используются базовой моделью. Я задался вопросом, будет ли разумно создать ряд свойств зависимостей, чтобы, если я изменю одно, это повлияет на изменение других как преобразование? Так, например, у меня есть свойство ScreenY. При его изменении обновляются PDFY и PDFPage и наоборот, но это кажется слишком сложным. Есть предложения?