Buduję aplikację Windows Phone 7, i potrzebuję odwołania do mojego ViewModel w moim widoku, więc mogę ustawić właściwość z mojej obsługi zdarzenia. Jedyny problem polega na tym, że nie jestem w stanie uzyskać tego odniesienia.MVVMLight - jak uzyskać odniesienie do ViewModel w widoku?
Co zrobiłem;
Mam ViewModelLocator (skreślony nieistotne bitów):
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>(); }
}
i widokiem (XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">
a kod opóźnieniem widoku:
public partial class Tuner : PhoneApplicationPage
{
private readonly TunerViewModel _viewModel;
public Tuner()
{
_viewModel = DataContext as TunerViewModel;
InitializeComponent();
}
Znalazłem ten link MVVM View reference to ViewModel gdzie DataContext jest rzutowany na ViewModel, więc próbowałem tego samego b bo to wygląda na dobre rozwiązanie. Jednak moje pole _viewModel ma wartość null po rzutowaniu. Dlaczego tak jest i jak to naprawić? Nie mogłem go znaleźć na Google/Stackoverflow
Z góry dzięki :)
Czy ustanowiony lokalizatora w swoich zasobach App.xaml (lub alternatywnie, ale nie jako suchy, w zasobach stron)? Ponieważ wygląda na to, że nie znajduje to viewmodel w twoim powiązaniu XAML. – Robaticus