gpt4 book ai didi

mvvmcross - 嵌套 MvxListView 绑定(bind)失败

转载 作者:行者123 更新时间:2023-12-03 08:25:32 24 4
gpt4 key购买 nike

是否可以嵌套绑定(bind) MvxListView(mvvmcross android v3.1 系列)?

我发现嵌套绑定(bind)失败:

MvxBind:Warning:  1.17 Unable to bind: source property source not found Property:Command on MenuSection

我们的ViewModel看起来有点像

   class SomeViewModel : MvxViewModel{
public List<MenuSection> Sections{get;set;}
}

在哪里

class MenuSection{
public string Title{get;set;}
public MenuItem[] Items{get;set;}
}
class MenuItem{
public string Name {get;set;}
public ICommand Command{get;set;}
}

删除了大多数非 mvx 属性的 axml 的缩减版本如下所示:

layout/page_home.axml

<android.support.v4.widget.DrawerLayout>
<FrameLayout android:id="@+id/content_frame"/>
<Mvx.MvxListView
local:MvxBind="ItemsSource Sections"
local:MvxItemTemplate="@layout/item_menusection" />
</android.support.v4.widget.DrawerLayout>

layout/item_menusection.axml

<LinearLayout>
<TextView local:MvxBind="Text Title"/>
<Mvx.MvxListView
local:MvxItemTemplate="@layout/item_menusection_item"
local:MvxBind="ItemSource Items; ItemClick Command" />
</LinearLayout>

layout/item_menusection_item.axml

<TextView local:MvxBind="Text Name"/>

最佳答案

那是因为您将内部 ListView 绑定(bind)到 MenuSection 对象。

Commmand 属性在 MenuItem 对象中,而不是在 MenuSection 中。

您需要将命令移动到 MenuSection。

编辑:

page_home.axml 绑定(bind)到 SomeViewModel =>

ListView.Items 绑定(bind)到 SomeViewMode.Sections =>

item_menusection.axml 中定义的每个项目都绑定(bind)到一个MenuSection =>

(在item_menusection.axml)ListView.Items 绑定(bind)到MenuSections.Items =>

item_menusection_item.axml 中定义的每个项目都绑定(bind)到 MenuItem =>

TextView.Text 绑定(bind)到 MenuItem.Name

同样在 item_menusection.axml 中:ListView.ItemClick 绑定(bind)到 MenuSections.Command(它不存在)

这是因为您如何定义layout/item_menusection.axml

<LinearLayout>
<TextView local:MvxBind="Text Title"/>
<Mvx.MvxListView
local:MvxItemTemplate="@layout/item_menusection_item"
local:MvxBind="ItemSource Items; ItemClick Command" />
</LinearLayout>

ListView 的 ItemSource 和 ItemClick 都绑定(bind)到相同的 View 模型(MenuSections)。

如果您想在 MenuItem View 模型中处理项目点击,您可以通过以下几种方式实现:

可以尝试将item_menusection_item中的布局设置为可点击,并将点击事件绑定(bind)到MenuItem.Command。

或者,给MenuSection添加一个Command属性,依次调用选中的MenuItem的Command即可:

public class MenuSection
{
public string Title{get;set;}
public MenuItem[] Items{get;set;}
public ICommand Command { get { return new MvxCommand<MenuSection>((ms) => ms.Command.Execute(null)); } }
}

关于mvvmcross - 嵌套 MvxListView 绑定(bind)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21898506/

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