Leo*_*ens 5 silverlight mvvm windows-phone-7 mvvm-light
我正在构建一个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>(); }
}
Run Code Online (Sandbox Code Playgroud)
和视图(XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">
Run Code Online (Sandbox Code Playgroud)
和视图的代码隐藏:
public partial class Tuner : PhoneApplicationPage
{
private readonly TunerViewModel _viewModel;
public Tuner()
{
_viewModel = DataContext as TunerViewModel;
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
我发现这个链接MVVM View对ViewModel的引用,其中DataContext被转换为ViewModel,所以我尝试了同样的,因为它看起来是一个很好的解决方案.但是,我的_viewModel字段在强制转换后为null.为什么这样,我该如何解决这个问题?我无法在Google/Stackoverflow上找到它
提前致谢 :)
因为您DataContext在View的构造函数中使用绑定表达式设置了XAML,DataContext所以尚未设置.这就是你得到null的原因.
尝试在Loaded事件DataContext中或之后进行强制转换:
public Tuner()
{
InitializeComponent();
Loaded += OnTunerLoaded;
}
private void OnTunerLoaded(object sender, RoutedEventArgs routedEventArgs)
{
_viewModel = DataContext as TunerViewModel;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |