gpt4 book ai didi

c# - 在 Xamarin.Forms 项目中实现 MVVM

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:33 24 4
gpt4 key购买 nike

我一直在研究 Xamarin.Forms,并制作了一个简单的“Hello World”类型的项目。我一直在尝试将同一个项目转换为 MVVM 类型的项目,只是为了感受一下。但是,我在决定我的模型应该是什么时遇到了麻烦。这是我的项目目前的样子:

View /MainView.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TestGround.MainView">
<ContentPage.Content>
<StackLayout VerticalOptions="Center">
<Label
Text="{Binding Greeting}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<Entry
Text="{Binding Name}"
/>
<Button
Text="Enter"
Command="{Binding SayHelloCommand}"
/>
</StackLayout>
</ContentPage.Content>
</ContentPage>

View /MainView.xaml.cs

using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace TestGround
{
public partial class MainView : ContentPage
{
public MainView ()
{
InitializeComponent ();
this.BindingContext = new MainViewModel();
}

}
}

ViewModels/MainViewModel.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;


namespace TestGround
{
public class MainViewModel :INotifyPropertyChanged
{
private string _greeting; //backing field for Greeting

public string Greeting //implementation for Greeting method
{
get { return _greeting; }

set
{
_greeting = value;
OnPropertyChanged ("Greeting"); //Notify view that change has taken place

}
}

public string Name { get; set; } //Name method for Entry field, completely useless

public ICommand SayHelloCommand { get; set; } //ICommand binds to buttons in XAML

public void SayHello() //Need a regular method to add to ICommand
{
Greeting = "Hello " + Name;
}

public MainViewModel ()
{
Greeting = "Its alive!";
Name = "Enter name";

SayHelloCommand = new Command(SayHello); //Regular command added to ICommand
}



#region PropertyChangedRegion

public void OnPropertyChanged (string propertyName)
{
if (PropertyChanged != null)
PropertyChanged (this, new PropertyChangedEventArgs (propertyName));
}

public event PropertyChangedEventHandler PropertyChanged;

#endregion

}
}

我有一个空的 Models 文件夹,我对 MVVM 结构的了解不足以决定我的模型应该是什么。我在想我应该在模型中声明我的方法并在 ViewModel 中实现它们,但我不确定。

谁能告诉我代码的哪些部分是模型?

最佳答案

在您发布的示例中,模型将是您设置GreetingName 的字符串。如果您的示例变得更高级,您最终可能会得到一个 Person 模型对象,该对象具有来自某些外部源(如数据库或 Web 服务)的 Name 属性,

View 模型将负责检索 Person 模型对象,可能是 GetPerson(),并设置 Name = Person.Name .

Forms 移动 CRM 示例 modelsview models .

"So anything that interacts with a View in any way will go into the ViewModel? So I could put the Greeting and Name properties in my Model, and have them initialized in the ViewModel to display in the View?"

通常,在某些情况下,您可能只关注不需要与 View 模型交互的 View 。认为 View 模型具有 View 的 headless 表示。如果您有一个用于登录的 View 模型,它可能具有 UsernamePassword 属性和一个用于登录的 Login 方法。当用户单击Login 按钮, View 模型验证 UsernamePassword,然后根据某些服务对用户进行身份验证。此时可以绑定(bind) View 以允许用户登录。还可以编写一个测试来测试使用相同 View 模型的登录过程。

关于c# - 在 Xamarin.Forms 项目中实现 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993611/

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