【发布时间】:2012-04-05 01:54:59
【问题描述】:
我正在构建一个 Windows Phone 7 应用程序,我需要在我的视图中引用我的 ViewModel,以便我可以从我的事件处理程序中设置一个属性。唯一的问题是我无法获得该参考。
我做了什么;
我有一个 ViewModelLocator(删除了不相关的位):
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<TunerViewModel>();
}
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "This non-static member is needed for data binding purposes.")]
public TunerViewModel Tuner
{
get { return ServiceLocator.Current.GetInstance<TunerViewModel>(); }
}
还有一个视图(XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">
以及视图的代码隐藏:
public partial class Tuner : PhoneApplicationPage
{
private readonly TunerViewModel _viewModel;
public Tuner()
{
_viewModel = DataContext as TunerViewModel;
InitializeComponent();
}
我找到了这个链接MVVM View reference to ViewModel,其中 DataContext 被转换为 ViewModel,所以我尝试了同样的方法,因为它看起来是一个很好的解决方案。但是,演员表后我的 _viewModel 字段为空。为什么会这样,我该如何解决?我在 Google/Stackoverflow 上找不到它
提前致谢:)
【问题讨论】:
-
您是否在 App.xaml 资源中设置了定位器(或者,在您的页面资源中,但不是 DRY)?因为这看起来好像没有在您的 XAML 绑定中找到视图模型。
标签: silverlight windows-phone-7 mvvm mvvm-light