Отправка пользовательских элементов управления WPF через WCF или аналогичные - PullRequest
3 голосов
/ 05 октября 2010

Я создаю приложение в стиле MVVM, в котором фактические представления (UserControls) хранятся удаленно и, надеюсь, будут отправлены через службу WCF в главное окно моего приложения.Я делаю это для того, чтобы пользователь не переустанавливал приложение каждый раз при добавлении нового представления.Однако, когда я пытаюсь вернуть пользовательский элемент управления из моей службы WCF, я получаю сообщение об ошибке:

System.Runtime.Serialization.InvalidDataContractException: Type 'System.Windows.Input.TouchDevice' cannot be serialized.

Мне интересно, есть ли способ обойти это или люди реализовали нечто подобное другими способами?

Спасибо, Ochowie

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Когда вы загружаете из сборки, вы создаете экземпляр скомпилированного объекта из сборки, который сильно отличается от операции десериализации, которая происходит с вызовом службы. Лучшее, что вы можете сделать с сериализацией - это передать необработанный XAML, который может быть загружен с помощью XamlReader, но это ограничивает то, что вы можете делать с элементом управления, поскольку вы не можете использовать какой-либо код. Если вы действительно настроили элементы управления размещением на своем сервере, наиболее гибким вариантом было бы загрузить в приложение сборку, содержащую новый элемент управления, и динамически загрузить новую сборку или использовать отдельный модуль запуска, который может загружать новые сборки элементов управления перед запуском основное приложение (убедитесь, что вы нашли время, чтобы понять последствия для безопасности и обеспечить безопасность сборок и загрузок).

0 голосов
/ 05 октября 2010

То, что вы пытаетесь сделать, на самом деле не имеет смысла ... элементы управления не DTO, они сильно зависят от среды выполнения. В WPF также существует проблема диспетчера: даже если бы вы могли передать элемент управления, как бы вы снова подключили его к диспетчеру приложений? В любом случае элементы управления WPF не сериализуются с DataContractSerializer, и изменить это невозможно.

Однако вы можете передать представление представлений в XAML. Это, конечно, предполагает, что ваши представления только XAML, без какого-либо кода. Затем вы можете загрузить представления, используя XamlReader, и отобразить их в вашем пользовательском интерфейсе. Я не уверен в целесообразности, но думаю, что это ваш лучший вариант.

Вы также можете реализовать свои представления в отдельной сборке, чтобы пользователям не нужно было переустанавливать все приложение. Им нужно будет только обновить измененные сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...