c#MVVM wpf设计在视图模型和视图方法之间传递数据



我不确定我是否完全理解MVVM设计背后的想法,特别是关于从viewmodel->view传递数据,反之亦然。

例如,假设我有一个具有这些属性的模型(尽可能简单(:

public class User{
public string username {get; set;}
public string password {get; set;}
}

这是我的ViewModel,它有一个登录方法:

// dependency injection
private readonly Context _context;
public constructor(Context context)
{
_context = context;
}
// my method to verify login:
public async Task<bool> login(string username, string password)
{
// fetching data
var user = await _context.Users.FirstOrDefaultAsync(p => p.username== username&& p.Password == password);
return (user != null);
}

所以我的问题是:我应该如何将这些方法传递到视图类?

我通常只是在button_click():中这样做

Var viewmodel = new Viewmodels.User();
login_state = viewmodel.login(email, password);

然而,我只是觉得这不是正确的方式,因为这会使设计紧密结合。我应该如何实施它?

首先确保您的视图模型设置为DataContext或可从中访问。

public SomeView(SomeViewModel vm)
{
DataContext = vm;
InitializeComponent();
}

现在您的视图模型可以从XAML访问:

<Button Command="{Binding LoginCommand}">

在视图模型中创建命令:

class SomeViewModel
{
private readonly Context _context;
public SomeViewModel(Context context)
{
_context = context;
}
public ICommand LoginCommand => new RelayCommand(LoginAndStuff);
private void LoginAndStuff(object param)
{
// do stuff here
}
}

如何放松通信=>此链接

您必须使用绑定来显示用户。对于从视图中调用操作,可以使用命令。它们可以绑定到ViewModel中。(为什么轻松通信(试着考虑测试你的代码。如果您在测试代码中使用视图对象,您将面临许多问题。MVVM可帮助您完全分离视图。如果你严格地将vm和view分开,你将有一个简单的单元测试生活。

相关内容

  • 没有找到相关文章

最新更新