Sto costruendo un'applicazione per Windows Phone 7 e ho bisogno di un riferimento al mio ViewModel nella mia vista, così posso impostare una proprietà dal mio gestore di eventi. L'unico problema è che non sono in grado di ottenere quel riferimento.MVVMLight - come ottenere un riferimento a ViewModel nella vista?
Quello che ho fatto;
Ho un ViewModelLocator (cancellato i bit irrilevanti):
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>(); }
}
e una vista (XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">
E il code-behind della vista:
public partial class Tuner : PhoneApplicationPage
{
private readonly TunerViewModel _viewModel;
public Tuner()
{
_viewModel = DataContext as TunerViewModel;
InitializeComponent();
}
Ho trovato questo collegamento MVVM View reference to ViewModel in cui DataContext è convertito in un ViewModel, quindi ho provato la stessa b perché sembra una buona soluzione. Tuttavia, il mio campo _viewModel è nullo dopo il cast. Perché è questo e come posso risolvere questo? Non ho potuto trovare su Google/StackOverflow
Grazie in anticipo :)
Ti è istituito il Locator nelle risorse App.xaml (o, in alternativa, ma non come DRY, nelle risorse di pagina)? Perché sembra che non stia trovando il viewmodel nel tuo binding XAML. – Robaticus