Как клонировать сетку WPF со всеми детьми? - PullRequest
1 голос
/ 15 ноября 2011

У меня есть несколько элементов управления в моем окне WPF.Я разделил окно на 4 секции.Если я нажму на раздел в левом верхнем углу, я хочу скопировать содержимое этого раздела в другое всплывающее окно.То, что я хочу скопировать, - это сетка, которая может содержать множество различных элементов управления, например: кнопка переключения, кнопка, панель ..., полученная из ItemsControl, Control ... и с DependencyProperty, ObservableCollection и т. Д.

Iпробовал:

  • XamlWriter.Save (данные);
  • XamlServices.Save (данные);

но у меня всегда есть эти ошибки:

  • Невозможно сериализовать универсальный тип 'System.Collections.ObjectModel.ObservableCollection`1 или
  • При разборе подписи возникло исключение BadImageFormatException.Вероятно, это связано с отсутствием общего контекста.Убедитесь, что genericTypeArguments и genericMethodArguments предоставлены и содержат достаточно контекста.

1 Ответ

1 голос
/ 15 ноября 2011

Вы не должны клонировать сам XAML, это жестоко и неправильно.

Взгляните на возможное решение MVVM ниже.Допустим, один DataGird представляет один бизнес-элемент, поэтому вам нужно следующее:

  • ItemsWindow.xaml - представляет ListView, а единственным элементом ListView является DataGrid, представляющий подробности элемента
  • ItemsViewModel - открыть список объектов Item (ObservableCollection<Item> Items { get; set; })
  • Каждый элемент ItemsWindow.ListView представлен в виде DataTemplate, подобного ItemDataTemplate
  • ItemsViewModelкоманда ICommand CopyItem и в обработчике команд фактически копирует только экземпляр бизнес-объекта Item и добавляет его в список Items, WPF отражает эти изменения через привязки, а пользовательский интерфейс будет обновляться новым ListViewItem с DataGrid, представляющим подробности толькоскопированный элемент

полезные ссылки:

...