Using MEF to Expose Interfaces in Your Silverlight MVVM Apps: Listing 1
CompositionNavigationBehavior
public class CompositionNavigationBehavior : Behavior<Frame> {
private bool processed;
[Import]
public CompositionContainer Container {
get; set;
}
[Import]
public CompositionNavigationContentLoader Loader {
get; set;
}
public CompositionNavigationBehavior() {
if (!DesignerProperties.IsInDesignTool)
CompositionInitializer.SatisfyImports(this);
}
protected override void OnAttached() {
base.OnAttached();
if (!processed) {
this.RegisterNavigationService();
this.SetContentLoader();
processed = true;
}
}
private void RegisterNavigationService() {
var frame = AssociatedObject;
var svc = new NavigationService(frame);
Container.ComposeExportedValue<INavigationService>(svc);
}
private void SetContentLoader() {
var frame = AssociatedObject;
frame.ContentLoader = Loader;
frame.JournalOwnership = JournalOwnership.Automatic;
}
}