如何克隆WPF对象?
时间:2020-03-05 18:44:27 来源:igfitidea点击:
任何人都有一个很好的示例,该示例如何深度克隆WPF对象并保留数据绑定?
标记的答案是第一部分。
第二部分是我们必须创建一个ExpressionConverter并将其注入序列化过程。详细信息在这里:
http://www.codeproject.com/KB/WPF/xamlwriterandbinding.aspx?fid=1428301&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2801571
解决方案
回答
怎么样:
public static T DeepClone<T>(T from) { using (MemoryStream s = new MemoryStream()) { BinaryFormatter f = new BinaryFormatter(); f.Serialize(s, from); s.Position = 0; object clone = f.Deserialize(s); return (T)clone; } }
当然,这会深深克隆任何对象,并且它可能不是镇上最快的解决方案,但是维护最少。
回答
我做过的最简单的方法是使用XamlWriter将WPF对象保存为字符串。 Save方法将序列化对象及其逻辑树中的所有子对象。现在,我们可以创建一个新对象,并使用XamlReader加载它。
前任:
将对象写入xaml(假设该对象是Grid控件):
string gridXaml = XamlWriter.Save(myGrid);
将其加载到新对象中:
StringReader stringReader = new StringReader(gridXaml); XmlReader xmlReader = XmlReader.Create(stringReader); Grid newGrid = (Grid)XamlReader.Load(xmlReader);