Wpf Взаимодействие данных в паттерне MVVM

281
26 ноября 2017, 12:10

Изучая паттерн научился более менее связывать элементы окон со свойствами ViewModel, то есть классах, как я понимаю, посредниках между кодом/логикой и окном. Однако при поиске того как коду/логике взаимодействовать с ViewModel потерпел фиаско. При самостоятельных попытках связывания приходил к одному и тому-же - нет единого центра управления. Кажется весь смысл в том чтобы единого центра не было, но я совершенно не понимаю как реализовать подобную логику. Пытался искать примеры, но все они манипулируют какими-то запредельно сложными для новичка фичами C#. Объясните пожалуйста как мне например сделать окно авторизации и перехода в какой нибудь холл/домашнюю_страничку.

Такой будет код замла:

<StackPanel>
    <TextBox FontSize="20" Text="{Binding Login, Mode=TwoWay}"/>
    <TextBox FontSize="20" Text="{Binding Pass, Mode=TwoWay}"/>
    <Button Height="30" Click="Button_Click"/>
</StackPanel>

С# код окна:

public partial class MainWindow : Window
{
    ViewModel ViewModel = new ViewModel();
    public MainWindow()
    {
        InitializeComponent();
        DataContext = ViewModel;
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ViewModel.Login = "1111";
        ViewModel.Pass = "2222";
    }
}

Код ViewModel:

class ViewModel : INotifyPropertyChanged
{
    private string login;
    private string pass;
    public string Login { get { return login; } set { login = value; OnPropertyChanged("Login"); } }
    public string Pass { get { return pass; } set { pass = value; OnPropertyChanged("Pass"); } }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Надеюсь вы не ослепните

Как видно единственный способ для привязки ViewModel каким я владею - это указание его в коде с помощью DataContext. При этом создается объект который никак и нигде не контролируется. Не говоря уже о том чтобы организовать взаимодействие всех данных между собой. В данном примере логика помещена в метод клик, так как я представить не могу как логику написанную в отдельном файле и привязать сюда без костылей.

READ ALSO
Программный доступ к проекту Visual Basic не является доверенным

Программный доступ к проекту Visual Basic не является доверенным

Не получается запустить макрос vba в проекте c#Подскажите, что я делаю не так

356
Unity загрузка спрайта из сети

Unity загрузка спрайта из сети

Здравствуйте, как в Unity объекту UI Image присвоить спрайт из сети, по определенной ссылке? Или как его можно загрузить в проект и сохранить в нем...

299
cudafy получение активной информации

cudafy получение активной информации

как на C# в библиотеке cudafy получить информацию о температуре видеокарты, на сколько она загружена и возможно ли управлять её частотой и напряжением?

229