Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / desktop / WPF

How to hook up a ViewModel to a window using an attached property

0.00/5 (No votes)
22 Nov 2010CPOL 9.4K  
I also have implemented a MarkupExtension to set the DataContext, which looks like this:[MarkupExtensionReturnType(typeof(ApplicationControllerBase))]public class ApplicationDataContext : MarkupExtension{ private Type dataContextType; public ApplicationDataContext(Type...
I also have implemented a MarkupExtension to set the DataContext, which looks like this:

[MarkupExtensionReturnType(typeof(ApplicationControllerBase))]
public class ApplicationDataContext : MarkupExtension
{
	private Type dataContextType;
	public ApplicationDataContext(Type dataContextType)
	{
		this.dataContextType = dataContextType;
	}

	public ApplicationDataContext()
		: this(null)
	{
	}

	public override object ProvideValue(IServiceProvider serviceProvider)
	{
		return ApplicationControllerBase.GetController(dataContextType);
	}
}


The usage of this is quite simply;
<Grid DataContext="{vm:ApplicationDataContext app:...}">
...
</Grid>


If you set the DataContext on an an element inside <window> rather than directly on Window, you will get your ViewModel object instanciated design-time.

When doing this, you should avoid service or database calls, as they will likely throw configurationexceptions.
You can detect the designer i code using this statement:

if(DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject())
{
  ...
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)