Когда вы регистрируете виды и просматриваете модели вручную в локаторе модели вида, вам все равно нужно включить автоматическое подключение в модели вида, это просто изменит то, как ViewModelLocator
разрешает вид и его просмотреть модель. Установка False
отключит его, поэтому ничего не решит.
prism:ViewModelLocator.AutoWireViewModel="True"
Как видно из справки источник для ViewModelLocationProvider
, зарегистрированные представления будут проверяться в первую очередь, когда разрешение модели представления. Если регистраций нет, будет использован откат к разрешению с соглашением об именах через отражение.
public static void AutoWireViewModelChanged(object view, Action<object, object> setDataContextCallback)
{
object viewModel = GetViewModelForView(view);
if (viewModel == null)
{
// Try to resolve the view model via regsitrations
var viewModelType = GetViewModelTypeForView(view.GetType());
// If views and view models are not registerd, fallback to reflection
if (viewModelType == null)
viewModelType = _defaultViewTypeToViewModelTypeResolver(view.GetType());
//...
}
// ...
}
Поскольку ViewModelLocator
разрешит представление как через регистрацию, так и через резервное соглашение об именах, вы не сделали заметьте разницу. Если вы переименуете свой HomeViewModel
в HomeFooBar
или что-нибудь еще, что не соответствует соглашению об именах, откат не удастся, и вы увидите, что он работает, как описано выше.
[... ] проводка вручную выполняется быстрее, так как отражение не требуется.
Я думаю, что есть много недоразумений относительно отражения. В этом случае с несколькими видами вы даже не заметите никакой разницы, и это намного удобнее. Не оптимизируйте преждевременно.