私はあなたが何を意味するか知っていると思います。基本的に、「コントローラー」または「マスター」ビューモデルのいずれかを追加して問題を解決します(psudocodeを言い訳)
すなわち
public class MasterVM
{
public ChildVM View1 {get;set;}
public ChildVM View2 {get;set;}
private Data data;
public MasterVM()
{
View1.OnEvent += updateData;
}
private Action<int> updateData(int value)
{
View2.Value = value;
}
}
Mediatorパターンを使用してこれを行う場合、クラスをコントローラーと見なします。すなわち。
public class Controller
{
public Controller(MediatorService m)
{
m.Subscribe("valueupdated", updateData);
}
private Action<int> updateData(int value)
{
m.Publish("showvalue", value);
}
}
public class View2
{
public View2(MediatorService m)
{
m.Subscribe("showvalue", (int v)=> {Value = v;});
}
}
この種のことにより、これらの高レベル永続クラスに「フローロジック」またはイベントオーケストレーションを配置し、VMコードを軽量に保つことができます。「ユーザーがBUYをクリックしたときに注文が処理される」という種類の「OrderFlowController」または「OrderProcessVM」で確認すること、または名前を付けたいことを変更する場合。BasketVM、PaymentVM、3dSecureVMなどの組み合わせではなく
したがって、「タブがまだ準備できていません」という特定の例では、
public class Controller
{
bool dataLoadCompleted;
public Controller(MediatorService m)
{
m.Subscribe("setTabRequest", setTab); //message from view model with set tab button
m.Subscribe("dataLoadComplete", dataLoadComplete); //message from data loading view model or some other controller?
}
private Action<int> setTab(int value)
{
if(!dataLoadCompleted)
{
m.Publish("error", "Please wait for data to load"); //message for error alert view model
}
else
{
m.Publish("setDefaultTab", value); //message for tab viewmodel
}
}
private Action dataLoadComplete()
{
//persist state;
dataLoadCompleted = true;
}
}