Experiments using MEF, MVVM and Silverlight 4 Beta – Part 4: Part Creator
Note – this is a multi part post:
In the last post I’ve updated the MEF MVVM example inserting some PartCreator<T> experiments and I’ve received some feedback about its usage in the ViewModel instance initialization, so I decided to build a new sample in which PartCreator<T> is used to dynamically create objects to be inserted in a collection available in the ViewModel.
The VM instance is now initialized using an import attribute:
/// <summary>
/// Get the ViewModel instance
/// </summary>
public class ViewModelProvider
{
public ViewModelProvider() { }
[ImportMainPageVMAttribute]
public object mainPageViewModelProvider { get; set; }
/// <summary>
/// Get the imported Instance of the ViewModel
/// </summary>
public object GetVMInstance
{
get
{
PartInitializer.SatisfyImports(this);
return mainPageViewModelProvider;
}
}
}
PartCreator<T> is now used in a new AddDataItemCommand which updates dynamically a collection available in the ViewModel class:
/// <summary>
/// A simple Command to add a new DataItem in the ViewModel collection
/// </summary>
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(ICommand))]
public class AddDataItemCommand : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (parameter != null)
if (parameter is string)
{
var dataItem = DataItemCreator.CreatePart().ExportedValue;
dataItem.Description = (string)parameter;
viewModel.dataItems.Add(dataItem);
}
}
[ImportMainPageVMAttribute]
public MainPageViewModel viewModel { get; set; }
[Import(typeof(DataItem))]
public PartCreator<DataItem> DataItemCreator { get; set; }
}
The source code is available for download here.
Happy Silverlighting!



