我正在使用Composite Application Library编写.NET3.5,WPF应用程序。应用程序分为几个模块。
在基础架构模块中,我定义了NetworkNode对象。网络模块管理网络节点的集合,并使用XmlSerializer来存储/加载此集合。到目前为止,每件事都有效。
但我有其他模块,例如NodeModule。如果在网络模块中选择了NetworkNode,则会使用EventAggregator将事件发布到其他模块。这些模块可以使用附加属性将各种信息附加到NetworkNode。
问题是NetworkModule不了解其他模块,因此这些属性未被序列化。有可能以某种方式列出并序列化附加到对象的所有属性?或者我是否必须更改概念并使用除附加属性之外的其他内容?
此致
答案 0 :(得分:3)
由于从纯CLR透视图中看不到附加属性,因此XmlSerializer无法了解它们。您需要切换到使用XamlSerializer架构,以便能够序列化“普通”CLR对象以及具有DependencyObjects的特殊知识。
答案 1 :(得分:3)
您可以使用DependencyObject.GetLocalValueEnumerator
列出在对象上定义的所有依赖项属性(附加或不附加):
LocalValueEnumerator propEnumerator = foo.GetLocalValueEnumerator();
while (propEnumerator.MoveNext())
{
Console.WriteLine ("{0} = {1}",
propEnumerator.Current.Property.Name,
propEnumerator.Current.Value);
}
但是,这对XML序列化没有帮助(除非你实现了IXmlSerializable,这很痛苦......)。您应该使用XamlWriter
代替(我假设是Drew所说的,因为没有XamlSerializer
...)
答案 2 :(得分:1)
如果您使用.Net 4.0(我相信它们不在.Net 3.5中)
您可以使用IAttachedPropertyStore或AttachablePropertyServices
此外,通常,必须正确定义附加属性:
参考例#2:http://blogs.msdn.com/b/mwinkle/archive/2009/12/07/attachedproperty-part-2-putting-it-together.aspx