#c# #mysql #wpf #xaml
#c# #mysql #wpf #xaml
Вопрос:
Итак, у меня есть класс и форма. Класс содержит код MySQL, а форма содержит события, которые запускают код в классе MySQL
// Code that acceses the class
// This triggers a method that is supposed to get the next record from the database.
private void next_Click(object sender, RoutedEventArgs e)
{
// Tag.text is the auto incremented unique record number.
// The MySQL code is meant to get the next record ahead of the number in tag.text
// in the corresponding table field.
usersMysql.RegForm_Next(tag.Text);
}
следующая часть представляет собой метод, который обращается к коду MySQL, предназначенному для извлечения следующей записи
public void RegForm_Next(string tag_Value)
{
// tagValue now holds the number, which was in tag.text in the previous page, as a string
// tagValue has already been predeclared as a string
tagValue = tag_Value;
// Navigation is the method that holds the MySQL code.
// By passing "Forward", the method has a code to tell from that, which query to excecute.
Navigation("Forward");
}
Следующий код — это код MySQL, предназначенный для извлечения записи
// Command to go to the next or previous rexord
public void Navigation(string scroll)
{
if (scroll == "Forward")
{
query = "select * from temp.signup where tag = (select min(tag) from temp.signup where tag > '" tagValue "' );";
}
if (scroll == "Backward")
{
query = "select * from temp.signup where tag = (select max(tag) from temp.signup where tag < '" tagValue "' );";
}
//Database connection parameters
string sqlcon = "datasource = " datasource ";" "port=" port ";" "username=" username ";" "password=" password ";";
MySqlConnection con = new MySqlConnection(sqlcon);
MySqlDataReader rdr;
MySqlCommand cmd = new MySqlCommand(query, con);
//Excecution
try
{
//If the connection is Open
con.Open();
{
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
// Declarations
// All these strings have been declared under the public class declaration.
sid = GetString(rdr, "id");
stag = GetColumnValueAsString(rdr, "tag");
sfirst = GetString(rdr, "first");
sfourth = GetString(rdr, "surname");
sdob = rdr.GetString("dob");
ssex = rdr.GetString("sex");
susername = GetString(rdr, "username");
spassword = GetString(rdr, "password");
}
con.Close();
}
}
catch (Exception ex)
{
ModernDialog.ShowMessage(ex.Message, "SQL related error: Nav", MessageBoxButton.OK);
}
}
Теперь возникает проблема. Мне нужно привязать значения строк к текстовым полям на предыдущей странице, которая вызывала метод в классе MySQL up.
// This is how the ID binding was set up for example.
// This is where sid was declared.
string sid;
public string ID
{
get
{
return sid;
}
set
{
sid = value;
RaisePropertyChanged("ID");
}
}
И вот как была настроена привязка текстового поля
<TextBox x:Name="id" Text="{Binding ID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" Margin="158,46,453,468" FontSize="13" TabIndex="1" />
Я установил контекст данных на странице с текстовыми полями, но строки никогда не загружаются обратно в текстовое поле
public registrationForm()
{
InitializeComponent();
usersMysql = new users.MySQL.usersMySQL();
DataContext = usersMysql;
}
Я могу подтвердить, что строки загружаются. Я тестировал с помощью окна сообщения. Но в текстовых полях ничего не отображается.
Это функция, которую я использую для «PropertyChanged» в классе
//Property changed
private void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public event PropertyChangedEventHandler PropertyChanged;
Если я привязываю два текстовых поля к одной и той же общедоступной строке, они отражают то, что вводится в другом. Тогда где я ошибаюсь?
Ответ №1:
Ваш код изменяет sid
поле поддержки, а не ID
свойство.
Следовательно, PropertyChanged
событие никогда не запускается, и WPF никогда не узнает об изменении.
Комментарии:
1. Теперь я просто чувствую себя глупо. Я удивлен, что никто еще не проголосовал за это. Большое спасибо.