gpt4 book ai didi

silverlight - MVVMLight - 如何在 View 中获取对 ViewModel 的引用?

转载 作者:行者123 更新时间:2023-12-04 17:38:42 25 4
gpt4 key购买 nike

我正在构建一个 Windows Phone 7 应用程序,我需要在我的 View 中引用我的 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>(); }
}

还有一个 View (XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">

以及 View 的代码隐藏:
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 上找不到它

提前致谢 :)

最佳答案

因为你设置了DataContext来自 XAML,在 View 的构造函数中具有绑定(bind)表达式 DataContext尚未设置。这就是你得到空值的原因。

尝试 Actor DataContextLoaded 中或之后事件:

public Tuner()
{
InitializeComponent();
Loaded += OnTunerLoaded;
}

private void OnTunerLoaded(object sender, RoutedEventArgs routedEventArgs)
{
_viewModel = DataContext as TunerViewModel;
}

关于silverlight - MVVMLight - 如何在 View 中获取对 ViewModel 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com