如何使用xaml和代码序列化序列化wpf用户控件

时间:2011-08-03 05:26:41

标签: c# wpf serialization user-controls

我想序列化wpf用户控件xaml和codebehind。 XamlWriter.Save()只序列化了xaml,那么在这种情况下我该怎么办?我的观点是我有一个usercontrol,其中包括自定义方法,订阅事件(例如:按钮单击)当我反序列化usercontrol(用于在运行时创建usercontrol)时,我想运行该事件和方法。对不起,我的英语不是很好。

1 个答案:

答案 0 :(得分:0)

只是一个想法,您可以使用MEF为您的用户控件构建插件结构。您希望动态创建用户控件,但事件处理程序仍应在项目的其他位置进行硬编码;使用插件结构,您可以只收集插件并重用它;事件可以通过命令来处理。也许给出一个场景,我们可以找出更多细节。

另外,ISerializable为字段提供了自定义二进制序列化的方法,而不是方法或事件。这是一个相关的问题: What is the point of the ISerializable interface? ;另一方面,您仍然可以尝试一些模式,例如Web控件如何保存其视图状态;例如 两个虚拟方法:

public virtual byte[] SaveState(); // it saves the states for your custom control
public virtual void LoadState(byte[] state) // it restore your state back to the control.

自定义代码应该是:

byte[] state = controlA.SaveState(); // this method saves its own state.
YourControl controlB = new YourControl();
controlB.LoadState(state); // this method load the save state from A to B itself.

对于事件,每个事件都有一个处理程序名称,您还可以将其处理程序名称序列化为该状态,并通过其命名容器中的已保存名称找回它。我没有任何保存方法的经验。

如果您仍想保存和加载状态,包括字段,事件和方法,可能序列化不是您认为正确的方式。