パラメータ配列内のすべてのオブジェクトを out として渡すようにするにはどうすればよいですか? 次のコードでは、元のパラメーターが割り当てられず、null であるため、失敗していることがわかります。明示的に言わなくても参照として渡されると思いますが、そうではないようです。その結果、すべてを out パラメータとして渡す必要がありました。
これが私のコードの重要な部分です。
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)
{
}
ここでメソッドに渡すこれらのオブジェクトはすべて、メソッドが返されたときに null のままです。
InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
すべてのビューとviewModels配列オブジェクトをアウトとして渡すことを要求したいのですが、配列自体全体をアウトとして渡すことしか要求できないようです。
ここで何ができますか?
EDIT:上で説明したように、問題全体はメソッドの複数形に起因しているようです。私がそれを取り除き、単にこれをやったとしたら...
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 });
}
すべてがスムーズに機能します。