C#将文本框绑定为MVVM中的参数
我已经开始学习MVVM,虽然我基本上理解这个理论,但我很难理解如何绑定文本框,以便它们将其值作为sqlcommand的参数值传递。我的代码: 图书模型类C#将文本框绑定为MVVM中的参数,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我已经开始学习MVVM,虽然我基本上理解这个理论,但我很难理解如何绑定文本框,以便它们将其值作为sqlcommand的参数值传递。我的代码: 图书模型类 public class BookModel : INotifyPropertyChanged { private string bookTitle; public string BookTitle { get { return bookTitle; } set { bookTitle =
public class BookModel : INotifyPropertyChanged
{
private string bookTitle;
public string BookTitle
{
get { return bookTitle; }
set { bookTitle = value; OnPropertyChanged(BookTitle); }
}
private string bookAuthor;
public string BookAuthor
{
get { return bookAuthor; }
set { bookAuthor = value; OnPropertyChanged(BookAuthor); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我在viewmodel中传递到commandclass中的方法:ICommand。谢天谢地,命令运行了,所以这很好
public void AddBook()
{
BookModel bk = new BookModel();
SampleSQL exsql = new SampleSQL();
exsql.NewBooks(bk.BookTitle, bk.BookAuthor);
}
包含我正在运行的SqlCommand的samplesql类
public void NewBooks(string bookTitle, string bookAuthor)
{
this.BookTitle = bookTitle;
this.BookAuthor = bookAuthor;
string query = "Insert Into BookModel (BookTitle, BookAuthor) Values (@BookTitle, @BookAuthor)";
SqlConnection ConStr = new SqlConnection(connection);
SqlCommand command = new SqlCommand(query, ConStr);
command.Parameters.AddWithValue("@BookTitle", BookTitle);
command.Parameters.AddWithValue("@BookAuthor", BookAuthor);
using (ConStr)
{
ConStr.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException exception)
{
throw exception;
}
}
}
具有datacontext和资源集的相关XAML
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Window.Resources>
<local:BookModel x:Key="bm"/>
</Window.Resources>
<Label Grid.Column="0" Grid.Row="0" Content="Book Title" Style="{StaticResource ItemHeading}"/>
<TextBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="0" Text="{Binding Path=BookTitle, Source={StaticResource bm}}" Style="{StaticResource LongTB}"/>
<Label Grid.Column="0" Grid.Row="1" Content="Book Author" Style="{StaticResource ItemHeading}"/>
<TextBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Text="{Binding Path=BookAuthor, Source={StaticResource bm}}" Style="{StaticResource LongTB}"/>
我的理解是,由于文本框是绑定的,它们应该神奇地将其值传递给viewmodel。但是,很明显,当我不断遇到sqlexception时,我遗漏了一些东西,它告诉我没有提供查询中相应的参数(我假设这意味着没有传递它,因为没有值)
我想问题在于ViewModel中的AddBook()方法和视图之间的连接,但是我尽可能尝试,似乎无法破解这个问题
任何帮助都将不胜感激 缺陷在于AddBook方法
public void AddBook()
{
// You are creating new instance of BookModel here which is not bound to UI.
BookModel bk = new BookModel();
SampleSQL exsql = new SampleSQL();
exsql.NewBooks(bk.BookTitle, bk.BookAuthor);
}
您应该执行以下操作之一