Лучше было бы использовать этот твик (реализованный в Caliburn, но не Micro).http://caliburnmicro.codeplex.com/discussions/265502
Прежде всего вам необходимо определить атрибут, используемый для хранения соответствующих данных, используемых для обнаружения представления:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class ViewAttribute : Attribute
{
public object Context { get; set; }
public Type ViewType { get; private set; }
public ViewAttribute(Type viewType)
{
ViewType = viewType;
}
}
Присоедините его к вашей модели представления.
[View(typeof(MyView))]
public class MyViewModel : Screen
Затем вам нужно изменить LocateTypeForModelType в вашем загрузчике на что-то вроде этого:
void Initialize()
{
var baseLocate = ViewLocator.LocateTypeForModelType;
ViewLocator.LocateTypeForModelType = (modelType, displayLocation, context) =>
{
var attribute = modelType.GetCustomAttributes(typeof(ViewAttribute), false).OfType<ViewAttribute>().Where(x => x.Context == context).FirstOrDefault();
return attribute != null ? attribute.ViewType : baseLocate(modelType, displayLocation, context);
};
}