I am writing a composite loosely coupled MVVM WPF application and child VMs in a parent VM are interfaces rather than class instances, e.g.
public IChildViewModel { get; set; }
Now how do I render this property using a DataTemplate? like:
<DataTemplate DataType="{x:Type contracts:IChildViewModel}">
I understand due to the nature of interfaces (multiple inheritance etc.) WPF does not allow this direct binding. But as interfaces should be used widely in loosely coupled applications, is there any workaround to bind DataTemplate to interfaces? Thanks.
You can bind to interfaces by telling wpf explicitly that you are binding to an interface field:
(Please note that ViewModelBase is simply a base-class that implements the INotifyPropertyChanged interface)
Then on the ViewModel:
And finally the Xaml that makes it possible:
As you can see, the binding refers explicitly to the 'IInterface' definiton.