【发布时间】:2022-01-18 11:00:26
【问题描述】:
我用 MVVM 学习 WPF 已经有一段时间了,听说 MVVM 也可以在 Android 上运行。我以前用 C# 写过以下代码。
C#:
public class TodoListViewModel
{
public List<TodoItem> todoList;
}
public class TodoItem
{
public string TaskName { get; set; }
public string Description { get; set; }
public int Priority { get; set; }
}
WPF XAML:
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Path=todoList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=TaskName}" />
<TextBlock Text="{Binding Path=Description}"/>
<TextBlock Text="{Binding Path=Priority}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
想知道在 Kotlin/Android 中是否有类似的编写方式,如下所示。
科特林:
class TodoListViewModel {
var todoList: ObservableArrayList<TodoItem>
}
class TodoItem {
var TaskName: ObservableField<String>
var Description: ObservableField<String>
var Priority: ObservableField<Int>
}
Android XML:
<LinearLayout source="@={viewModel.todoList}">
<TextView android:text="@={TaskName}" />
<TextView android:text="@={Description}" />
<TextView android:text="@={Priority}" />
</LinearLayout>
对于提出这样一个基本问题,我深表歉意,但我找不到任何类似的解决方案,即使在 StackOverflow 上也是如此。我可以使用Adapter 或Factory 找到许多解决方案,但这些方法是用代码实例化视图对象,我认为这些不是使用 XML 和 MVVM 的最佳方法。
提前感谢您的 cmets 和答案。如果你对 Java 比对 Kotlin 更熟悉,那么 Java 没问题。
【问题讨论】:
标签: java android kotlin mvvm data-binding