The following code will add an extension method to Silverlight 3 based C# code to perform a deep copy of a custom object. This templated method uses the MemoryStream serialization/deserialization technique, but will not work with UIElement members or derivatives.
public static class ExtensionMethods
{
public static T DeepCopy(this T oSource)
{
T oClone;
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
dcs.WriteObject(ms, oSource);
ms.Position = 0;
oClone = (T)dcs.ReadObject(ms);
}
return oClone;
}
}
Just what I needed...thanks.
ReplyDeleteHave you got an other solution to clone UIElement in silverlight?
ReplyDeleteThanks
As you probably have already discovered, the XamlWriter.Save() and XamlReader.Load() technique isn't available in Silverlight and doesn't work in partial trust scenarios. There are a couple of hand-rolled options that I've used with some degree of success, which you might find useful (or at least help you down the path):
Deletehttp://www.davidpoll.com/2010/07/25/to-xaml-with-love-an-experiment-with-xaml-serialization-in-silverlight/
http://weblogs.asp.net/mehrantoosi/archive/2008/03/03/silverlight-s-xamlwriter.aspx
http://projectsilverlight.blogspot.com/2009/10/silverlight-3-xamlwriter-v04.html