如何克隆所有孩子的WPF网格?

时间:2011-11-15 13:34:16

标签: wpf xml xaml window clone

我的WPF窗口中有几个控件。我将窗口分为4个部分。如果我点击左上角的部分,我想在另一个窗口弹出窗口中复制此部分的内容。 我要复制的是一个可以包含许多不同控件的网格,例如:togglebutton,button,panel ...派生自ItemsControl,Control ...以及DependencyProperty,ObservableCollection等。

我试过了:

  • XamlWriter.Save(数据);
  • XamlServices.Save(数据);

但我总是有这些错误:

  
      
  • 无法序列化泛型类型'System.Collections.ObjectModel.ObservableCollection`1或
  •   
  • 解析签名时抛出了BadImageFormatException。这可能是由于缺乏通用上下文。确保   提供了genericTypeArguments和genericMethodArguments   包含足够的背景。
  •   

1 个答案:

答案 0 :(得分:1)

你不应该克隆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通过绑定反映此更改并且UI将由新的更新带有DataGrid的ListViewItem,表示刚刚复制的Item
  • 的详细信息

有用的链接: