cv MVVM дизайн wpf, передающий данные между viewmodel и методами представления - PullRequest
0 голосов
/ 16 ноября 2018

Я не уверен, что вполне уловил идею разработки 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);

Однако я просто чувствую, что это не правильный путь, как это было бысделать дизайн очень тесно связанным.Как мне это реализовать?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Сначала убедитесь, что ваша модель просмотра установлена ​​как DataContext или доступна из нее.

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

Теперь ваша модель просмотра доступна из XAML:

<Button Command="{Binding LoginCommand}">

Создать команду в viewmodel:

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
    }
}

Как RelayCommand => эта ссылка

0 голосов
/ 16 ноября 2018

Вы должны использовать привязки для отображения вашего пользователя. Для вызова действий из представления вы можете использовать команды. Они могут быть связаны в вашей ViewModel. ( Почему RelayCommand ) Попробуйте подумать о тестировании вашего кода. Если вы используете ваши объекты просмотра в тестовом коде, вы столкнетесь с множеством проблем. MVVM поможет вам полностью отделить ваш взгляд. Если вы строго разделите виртуальную машину и посмотрите, у вас будет легкий жизненный уровень для тестирования юнитов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...