Получить данные с TextBox

119
05 сентября 2019, 18:40

Вникаю в WPF и MVVM. С начало написал так:

private void Button_Click(object sender, RoutedEventArgs e)
{
    if(String.IsNullOrEmpty(txtAccountLogin.Text) || String.IsNullOrEmpty(txtAccountPassword.Text))
    {
        MessageBox.Show("Все поля должны быть заполнены!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
    }
    else
    {
        using (Cursor = Cursors.Wait)
        {
            using (AccountContext ac = new AccountContext())
            {
                Account account = new Account();
                account.login = txtAccountLogin.Text;
                account.password = txtAccountPassword.Text;
                ac.Accounts.Add(account);
                ac.SaveChanges();
                MessageBox.Show("Аккаунт " + account.login + " добавлен.", "Сообщение", MessageBoxButton.OK, MessageBoxImage.Information);
                txtAccountLogin.Text = "";
                txtAccountPassword.Text = "";
            }
        }
    }
}  

Но потом понял что код не должен знать ничего о интерфейсе. Вопрос, мне нужно создать модель "account", наследовать его INotifyPropertyChanged сделать event изменений полей. Потом надо сделать AccountViewModel и в нем и дальше я не понимаю что дальше. По клику кнопки к чему мне обратиться что получить текст из контролов? Правильно ли я понимаю что из за события изменения биндинг будет контрола будет так же изменять и состояние свойства? Вот мой пример как сделал с DataGrid:

class Message: INotifyPropertyChanged
{
    public string author { get; set; }
    public string message { get; set; }
    public string bulletinText { get; set; }
    public int id { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
}  
class MessageViewModel: INotifyPropertyChanged
{
    private Message Message { get; set; }
    public ObservableCollection<Message> Messages { get; set; }
    public MessageViewModel()
    {
        Messages = new ObservableCollection<Message>
        {
            new Message{ author = "Федор Иванович", bulletinText = "Привет, как дела?", message = "Продам собаку", id = 154 },
            new Message{ author = "Меткий снайпер", bulletinText = "Сообщите номер накладной?", message = "Доставка овощей", id = 255}
        };
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName]string prop = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}
    public Main()
    {
        InitializeComponent();
        DataContext = new MessageViewModel();
    }  

XAML:

<DataGrid CanUserAddRows="False" ItemsSource="{Binding Messages}"  DockPanel.Dock="Top" AutoGenerateColumns="False" HorizontalAlignment="Stretch"  VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch" Margin="5,0,0,0" MouseDoubleClick="DataGrid_MouseDoubleClick">
    <DataGrid.Columns>
        <DataGridTextColumn Header="От кого" Binding="{Binding Path=author}" Width="*" IsReadOnly="True" />
        <DataGridTextColumn Header="Сообщение" Binding="{Binding Path=message}" Width="*" IsReadOnly="True" />
        <DataGridTextColumn Header="Превью объявления" Binding="{Binding Path=bulletinText}" Width="*" IsReadOnly="True" />
    </DataGrid.Columns>
</DataGrid>  

Вот так отлавливаю событие клика:

private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DataGrid grid = (DataGrid)sender;
    int id = (grid.SelectedItem as Message).id;
    MessageBox.Show(id.ToString());
}  

Как сделать в первой части моего вопроса?

READ ALSO
MySqlDataReader ошибка

MySqlDataReader ошибка

на строку MySqlDataReader reader1 = command1ExecuteReader(); выдается ошибка System

117
Определить язык на сайте play.google.com Curl запросом

Определить язык на сайте play.google.com Curl запросом

При получении содержимого сайта playgoogle

121
Разбить строку по словам через запятую

Разбить строку по словам через запятую

ЗдравствуйтеЕсть переменная

141