gpt4 book ai didi

c# - MvvmCross - 使用 Activity (上下文)参数实例化 ViewModel

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:57 25 4
gpt4 key购买 nike

使用 MvvmCross,我创建了一种跨平台方法来翻译 Android 和 iOS 上的字符串,因此我可以在我的 ViewModel 中使用一个共享的 translate() 方法。我的核心项目中有一个共享接口(interface) ILocalizationHelper,在每个平台中我都创建了一个继承自该接口(interface)的 LocalizationHelper 类。所以我的 ViewModel 现在包含一个 ILocalizationHelper 实例,我可以在该实例上使用我的 translate() 方法。

问题:要使用 GetString() 在 Android 上翻译字符串,我需要一个上下文( Activity )。因此实例化此 LocalizationHelper 并不简单。目前,我使用 MvxViewModel 中的 Translator 属性解决了这个问题,我可以从我的 View 中设置它。

我的 fragment 类如下:

[MvxFragment(typeof(AccountViewModel), Resource.Id.content_frame, AddToBackStack = true)]
[Register("appname.Android.Fragments.Account.LoginFragment")]
public class LoginFragment : MvxFragment<LoginViewModel>
{
base.OnCreateView(inflater, container, savedInstanceState);
View view = this.BindingInflate(Resource.Layout.FragmentLogin, container, false);

ViewModel.Translator = new LocalizationHelper(Activity);
}

现在我在想这可能是不好的做法(是吗?)。所以我更愿意使用 ViewModel 的构造函数注入(inject)我的 LocalizationHelper 实例。但我不知道我该怎么做,如果有可能的话:

private ILocalizationHelper _translator;

public ILocalizationHelper Translator
{
get { return _translator; }
set { _translator = value; }
}

public LoginViewModel(ILocalizationHelper localizationHelper)
{
_translator = localizationHelper;
}

感谢您对这方面的最佳实践的任何启发。

最佳答案

您可以使用 IMvxAndroidCurrentTopActivity这是针对当前顶部注册的 Activity在你的 android 中获取 Activity 上下文 LocalizationHelper实现。

var context = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity;

关于c# - MvvmCross - 使用 Activity (上下文)参数实例化 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44051624/

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