MvxRecyclerView 项目有空 ViewModel
MvxRecyclerView items have null ViewModel
在我的 xamarin.droid 应用程序中,我有下一个布局 MvxRecyclerView
<MvxRecyclerView
...
local:MvxItemTemplate="@layout/symbol_item_fragment"
local:MvxBind="ItemsSource Items" />
symbol_item_fragment
定义为
<?xml version="1.0" encoding="utf-8"?>
<fragment
...
android:name="mobile.droid.company.fragments.SymbolItemFragment" />
我定义SymbolItemFragment
为
[Register("mobile.droid.company.fragments.SymbolItemFragment")]
public class SymbolItemFragment : MvxFragment<SymbolItemViewModel>
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.symbol_item_view, null);
//ViewModel is null
return view;
}
}
我可以看到 Fragments 已正确呈现,但出于某种原因未为其定义 ViewModel。
我错过了什么?
我认为扩展方法EnsureBindingContextIsSet()
会解决它。
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
this.EnsureBindingContextIsSet (savedInstanceState);
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.symbol_item_view, null);
return view;
}
正如@CheeseBaron 在对问题的评论中所说
MvxFragments are not inflatable through XML, or well they are, but
they won't ever have a ViewModel attached.
因此,目前还没有针对此方法的解决方案。
在我的 xamarin.droid 应用程序中,我有下一个布局 MvxRecyclerView
<MvxRecyclerView
...
local:MvxItemTemplate="@layout/symbol_item_fragment"
local:MvxBind="ItemsSource Items" />
symbol_item_fragment
定义为
<?xml version="1.0" encoding="utf-8"?>
<fragment
...
android:name="mobile.droid.company.fragments.SymbolItemFragment" />
我定义SymbolItemFragment
为
[Register("mobile.droid.company.fragments.SymbolItemFragment")]
public class SymbolItemFragment : MvxFragment<SymbolItemViewModel>
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.symbol_item_view, null);
//ViewModel is null
return view;
}
}
我可以看到 Fragments 已正确呈现,但出于某种原因未为其定义 ViewModel。
我错过了什么?
我认为扩展方法EnsureBindingContextIsSet()
会解决它。
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
this.EnsureBindingContextIsSet (savedInstanceState);
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.symbol_item_view, null);
return view;
}
正如@CheeseBaron 在对问题的评论中所说
MvxFragments are not inflatable through XML, or well they are, but they won't ever have a ViewModel attached.
因此,目前还没有针对此方法的解决方案。