我在MvxAppCompatActivity整个项目中一直在使用,但在这种特定情况下,我必须使用MvxAppCompatDialogFragment.
不幸的是,在这种情况下,我以某种方式丢失了 ViewModel 的绑定上下文。
移动测试视图
[MvxDialogFragmentPresentation]
[Register(nameof(MobileScreenTestView))]
public class MobileTestView : MvxAppCompatDialogFragment<MobileTestViewModel>
...
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.Inflate(Resource.Layout.mobile_screen, container, false);
}
...
移动测试视图模型
public class MobileTestViewModel : MvxViewModel<MInput, MResult>
...
public string Instructions { get; set; } = "Instructions";
...
mobile_screen.axml
...
<TextView
android:id="@+id/text_mobile"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:gravity="center_vertical|center_horizontal"
tools:text="Scan"
local:MvxBind="Text Instructions" />
...
local:MvxBind="Text Instructions"不再工作了,但我已经检查过了,它在视图模型中设置为OnCreateView().
上面的代码适用于MvxAppCompatActivity.
如果我想做的事情是不可能的,我总是可以这样做
view.FindViewById<TextView>(Resource.Id.text_mobile).Text = ViewModel.Instructions;
并不是我真的需要使用local:MvxBind,但我想知道我做错了什么。
更新- 对于任何有同样问题的人:
将方法更改OnCreateView为:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.mobile_screen, container, false);
}
并且您的 BindingContext 将正常工作。