
Hello, I am trying to serialize layout created using MVVM. I was following instructions mentioned here, but when I set the DataContext of newly created windows, the view is not updated and I end up with empty Document Window. Can you help me suggesting, what am I doing wrong?
class SerializationManager
{
public static void Serialize(DockSite dockSite, DockSiteViewModel dockSiteViewModel)
{
var layoutSerializer = new DockSiteLayoutSerializer
{
SerializationBehavior = DockSiteSerializationBehavior.All,
DocumentWindowDeserializationBehavior = DockingWindowDeserializationBehavior.AutoCreate
};
layoutSerializer.SaveToFile(ConfigurationHelper.Instance.PathToLayoutConfiguration, dockSite);
using (var fs = new FileStream(ConfigurationHelper.Instance.PathToModel, FileMode.Create))
{
var serializer = new DataContractSerializer(typeof(DataItemContract[]));
var ser = dockSiteViewModel.DocumentItems.Select(i => i.ToContract()).ToArray();
serializer.WriteObject(fs,ser);
fs.Close();
}
}
public static void Deserialize(DockSite dockSite)
{
if (!File.Exists(ConfigurationHelper.Instance.PathToModel)||!File.Exists(ConfigurationHelper.Instance.PathToLayoutConfiguration))
return;
DataItemContract[] ser;
using (var fs = new FileStream(ConfigurationHelper.Instance.PathToModel, FileMode.Open))
{
var serializer = new DataContractSerializer(typeof(DataItemContract[]));
ser = (DataItemContract[]) serializer.ReadObject(fs);
fs.Close();
}
var layoutSerializer = new DockSiteLayoutSerializer
{
SerializationBehavior = DockSiteSerializationBehavior.All,
DocumentWindowDeserializationBehavior = DockingWindowDeserializationBehavior.AutoCreate
};
layoutSerializer.DockingWindowDeserializing += async (sender, args) =>
{
var window = args.Window as DocumentWindow;
var xmlWindow = args.Node;
if (window == null || xmlWindow == null) return;
var dataItemContract = ser.FirstOrDefault(i => i.SerializationId == xmlWindow.SerializationId);
if (dataItemContract == null) return;
var viewModel = await dataItemContract.GetViewModel();
Application.Current.Dispatcher.Invoke(() => window.DataContext = viewModel);
};
layoutSerializer.LoadFromFile(ConfigurationHelper.Instance.PathToLayoutConfiguration, dockSite);
}
}