어떻게 WPF 객체를 복제 할 수 있습니까?


1 Answers

.NET 4.0에서는 새로운 xaml 직렬화 스택이 훨씬 쉽게 만듭니다.

var sb = new StringBuilder();
var writer = XmlWriter.Create(sb, new XmlWriterSettings
{
    Indent = true,
    ConformanceLevel = ConformanceLevel.Fragment,
    OmitXmlDeclaration = true,
    NamespaceHandling = NamespaceHandling.OmitDuplicates, 
});
var mgr = new XamlDesignerSerializationManager(writer);

// HERE BE MAGIC!!!
mgr.XamlWriterMode = XamlWriterMode.Expression;
// THERE WERE MAGIC!!!

System.Windows.Markup.XamlWriter.Save(this, mgr);
return sb.ToString();
Question

누구나 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;
        }
    }

물론이 딥 클론 모든 개체, 그리고 그것은 마을에서 가장 빠른 해결책이되지 않을 수도 있지만 최소한의 유지 보수가 ... :)



Related