我正在尝试使用 MVVM Light Framework 在我的 Windows Phone 应用程序中创建一个页面,该页面将动态加载多个 UserControl 之一作为其主要 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;
但这会创建视图模型的新实例,因此页面和用户控件正在处理视图模型的两个单独实例。
我还尝试在应用程序资源中使用 viewmodelocator 的实例:
_caseBrowser = new StandardCaseBrowserControl { IsEnabled = true };
DataContext = ((FBViewModelLocator)Application.Current.Resources["Locator"]).StandardCasesViewModel;
同样的事情也发生了。
有谁知道是否有这样做的好方法,或者我是否应该放弃这个并找到不同的方法?