MVVM Light Frameworkを使用して、Windows Phoneアプリでページを作成しようとしています。このページは、いくつかのUserControlの1つをプライマリUI要素として動的にロードします。UserControlがロードされ、ページの分離コードファイルに挿入されます。
public partial class HomePage
{
private readonly UserControl _caseBrowser;
public HomePage()
{
InitializeComponent();
_caseBrowser = new StandardCaseBrowserControl { IsEnabled = true };
DataContext = ((FBViewModelLocator)Application.Current.Resources["Locator"]).StandardCasesViewModel;
}
protected override void OnLoaded(object sender, RoutedEventArgs e)
{
base.OnLoaded(sender, e);
// add a case browser to the content panel
ContentPanel.Children.Add(_caseBrowser);
// more stuff that is beyond the scope of this question
}
}
各UserControlは、xaml内の独自のViewModelにもバインドされています。ページ自体を、ロードされているUserControlと同じViewModelにバインドしようとしています。
単純にDataContextを割り当ててみました。
_caseBrowser = new StandardCaseBrowserControl { IsEnabled = true }; // the usercontrol
DataContext = _caseBrowser.DataContext;
しかし、それはヌルになりました。
また、ViewModelLocatorによって提供される静的ViewModelにバインドしようとしました。
_caseBrowser = new StandardCaseBrowserControl { IsEnabled = true };
DataContext = FBViewModelLocator.StandardCasesViewModelStatic;
ただし、これによりビューモデルの新しいインスタンスが作成されるため、ページとユーザーコントロールはビューモデルの2つの別々のインスタンスで機能します。
また、アプリケーションリソースでviewmodelocatorのインスタンスを使用してみました。
_caseBrowser = new StandardCaseBrowserControl { IsEnabled = true };
DataContext = ((FBViewModelLocator)Application.Current.Resources["Locator"]).StandardCasesViewModel;
そして同じことが起こりました。
これを行うための良い方法があるかどうか、またはこれを破棄して別のアプローチを見つける必要があるかどうかを誰かが知っていますか?