私はWindows Phone 7アプリケーションを構築しています。自分のビューでViewModelへの参照が必要なため、イベントハンドラからプロパティを設定できます。唯一の問題は、私がその参照を得ることができないということです。MVVMLight - ビューでViewModelへの参照を取得するには?
私は何をしましたか。
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();
}
IはViewModelLocator(削除された無関係なビット)を有します
このリンクが見つかりましたMVVM View reference to ViewModel DataContextがViewModelにキャストされているので、それは良い解決策のように見える。しかし、_viewModelフィールドはキャストの後ではnullです。なぜこれが問題なのですか?あなたはDataContext
がまだ設定されていないビューのコンストラクタでバインディング式にXAMLからDataContext
を設定しているので、私はGoogleの/ StackOverflowの上、事前:)
はあなたのApp.xamlリソースにロケータを設定しました(あるいはしますが、あなたのページのリソースでは、のように乾燥していませんか)?これは、XAMLバインディングでviewmodelが見つからないように見えるためです。 – Robaticus