Как я могу сериализовать пользовательский контроль wpf с xaml и кодом позади - PullRequest
0 голосов
/ 03 августа 2011

Я хочу сериализовать пользовательский элемент управления wpf xaml и codebehind.XamlWriter.Save() только сериализовать xaml, так что я могу сделать в этой ситуации?Моя ситуация такова: у меня есть пользовательский контроль, который включает в себя пользовательские методы, подписанные события (например, нажатие кнопки). Когда я десериализую пользовательский контроль (для создания пользовательского контроля во время выполнения), я хочу запустить эти события и методы.Извините, мой английский не очень хорош.

1 Ответ

0 голосов
/ 03 августа 2011

Просто идея, вы можете использовать MEF для создания структуры плагина для вашего пользовательского контроля. Вы хотите создать пользовательский элемент управления на лету, но обработчик событий все еще должен быть жестко задан где-то еще в вашем проекте; со структурой плагина вы можете просто собрать плагин и использовать его повторно; события могут быть обработаны командой что-то. Может быть, дать сценарий, и мы можем выяснить более подробно.

Кроме того, ISerializable предоставляет способ настраиваемой двоичной сериализации для поля, а не для методов или событий. Вот связанный вопрос: Какой смысл интерфейса ISerializable? ; с другой стороны, вы все равно можете попробовать какой-то шаблон, например, как веб-элемент управления сохраняет свое состояние просмотра; например два виртуальных метода:

public virtual byte[] SaveState(); // it saves the states for your custom control
public virtual void LoadState(byte[] state) // it restore your state back to the control.

Пользовательский код должен выглядеть так:

byte[] state = controlA.SaveState(); // this method saves its own state.
YourControl controlB = new YourControl();
controlB.LoadState(state); // this method load the save state from A to B itself.

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

Если вы все еще хотите сохранить и загрузить состояние, включая поля, события и метод, возможно, я думаю, что сериализация - это не то, что вам нужно.

...