Как мне потребовать, чтобы все объекты в массиве параметров передавались как выходные? В моем следующем коде я знаю, что он терпит неудачу, потому что мои исходные параметры никогда не назначаются и, следовательно, равны нулю. Несмотря на то, что я думаю, что они будут переданы в качестве ссылки без явного указания на это, похоже, это не так. В результате мне пришлось попытаться передать все это как выходной параметр.
Вот части моего кода, которые я считаю важными.
ChatController(некоторые элементы удалены)
class ChatController : ControllerBase
{
#region Views
ChatAreaView viewChatArea;
UserListView viewUserArea;
MessageView viewMessageArea;
LoginPromptView viewLoginPrompt;
#endregion
#region ViewModels
ChatAreaViewModel viewModelChatArea;
UserAreaViewModel viewModelUserArea;
MessageAreaViewModel viewModelMessageArea;
LoginPromptViewModel viewModelLoginPrompt;
#endregion
public override void CreateViewsAndViewModels()
{
//InitializeViewAndViewModel(out viewChatArea, out viewModelChatArea);
//InitializeViewAndViewModel(out viewMessageArea, out viewModelMessageArea);
//InitializeViewAndViewModel(out viewUserArea, out viewModelUserArea);
//InitializeViewAndViewModel(out viewLoginPrompt, out viewModelLoginPrompt);
InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
}
}
ControllerBase (некоторые элементы удалены)
public abstract class ControllerBase : PrismBase
{
public void InitializeViewAndViewModel<TView, TViewModel>(out TView view, out TViewModel viewModel)
where TView : FrameworkElement, new()
where TViewModel : new()
{
view = new TView();
viewModel = new TViewModel();
view.DataContext = viewModel;
}
public void InitializeViewsAndViewModels(FrameworkElement[] views, object[] viewModels)
{
if (views.Length != viewModels.Length)
throw new ArgumentOutOfRangeException("views and viewModels must have the same number of elements.");
for (int i = 0; i < views.Length -1 ; i++)
InitializeViewAndViewModel(out views[i], out viewModels[i]);
}
}
Проблемная зона здесь
public void InitializeViewsAndViewModels(FrameworkElement[] views, object[] viewModels)
{
}
Все эти объекты, которые я передаю методу, остаются нулевыми, когда метод возвращается.
InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
Я хочу потребовать передачи всех объектов массива views и viewModels как исходящих, но я могу только потребовать, чтобы весь массив передавался как исходящий.
Что я могу здесь сделать?
РЕДАКТИРОВАТЬ: Вся проблема, кажется, связана с формой множественного числа метода, как я описал выше. Если бы я избавился от этого и просто сделал это...
public override void CreateViewsAndViewModels()
{
InitializeViewAndViewModel(out viewChatArea, out viewModelChatArea);
InitializeViewAndViewModel(out viewMessageArea, out viewModelMessageArea);
InitializeViewAndViewModel(out viewUserArea, out viewModelUserArea);
InitializeViewAndViewModel(out viewLoginPrompt, out viewModelLoginPrompt);
//InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
// new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
}
все работает просто плавно.