0

首先是一个小背景故事:我现在正在学习 Xamarin 一个月,我即将开始我的第一个项目。

我需要有4 个嵌套的“代”关系数据库,我必须将其包含在一个视图中。

当我开始嵌套东西时,我不得不将一些命令(ViewModel 代码)移动到模型中。

我想不惜一切代价避免这种情况,因此出现了问题:

使用其他 ViewModel 作为可绑定属性是否对 MVVM 友好,如下例所示?

视图模型:

public class MainViewModel : FreshBasePageModel 
{
    public ObservableCollection<OtherViewModel> OtherCollection { get; set; }
}

public class OtherViewModel: FreshBasePageModel 
{
    public Command SomeCommand { get; set; }
}

并在视图中像这样使用它:

<ContentPage>
    <ListView ItemsSource={Binding OtherCollection} SelectedItem={Binding SomeCommand}>
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>

这种方法对我来说似乎没问题,但这是我的第一个 MVVM 项目,我想知道这是否是你做事的方式。

我使用FreshMvvm作为支持框架,它使用约定进行绑定,因此视图会自动绑定到其同名伙伴。

另外,如果您想查看我的嵌套列表,请参见下文: 在此处输入图像描述

谢谢你的时间,

4

1 回答 1

1

默认情况下不支持这种行为,因为控件只有一个DataContextoBindableContex并且这个类是编译器查找绑定属性和命令的地方。

在 MVVM 中,您应该只为每个 View 使用一个 ViewModel,这样您的方法就不会频繁使用。

但是,我认为如果您使用 Path 绑定属性并且您拥有其 BindableContex 所在的其他控件,则可以使用您提出的代码OtherViewModel

于 2017-07-25T09:05:22.640 回答