Я пишу приложение для Windows Phone. У меня есть переменный результат, который хранит ответ, отправленный сервером после запроса из приложения Windows Phone.Обработчик событий OnPropertyChanged
У меня есть класс под названием запрос, который генерирует запрос и получает ответ. Я хочу проверить, когда переменные меняются на переменные, и я могу выполнить некоторую дальнейшую обработку в своем приложении.
Вот класс запроса:
namespace PhoneApp1
{
public class Request: INotifyPropertyChanged
{
public string data;
public string result = "test";
public Request()
{
}
public string Result
{
get
{
return result;
}
set
{
if (this.result == value)
{
return;
}
this.result = value;
OnPropertyChanged("Result");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public void doRequest(string parameters, string URL)
{
data = parameters;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
public void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
byte[] byteArray = Encoding.UTF8.GetBytes(data);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
public void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream());
result = httpWebStreamReader.ReadToEnd();
}
}
}
Как вы можете видеть, я осуществил OnPropertyChanged обработчик событий на результат переменной.
Вот код, из которого я создаю экземпляр класса, чтобы сделать запрос:
**//Log-in Button Event Handler**
Request req = new Request();
req.PropertyChanged += new PropertyChangedEventHandler(req_PropertyChanged);
req.doRequest("function=LogIn&username=" + username + "&password=" + password, "http://localhost:4000/Handler.ashx");
}
}
}**//End of Log-in Button Event Handler**
public void req_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
string result = ((Request)sender).Result;
if (result.Equals("True") || result.Equals("true"))
{
PhoneApplicationService.Current.State["Username"] = username;
NavigationService.Navigate(new Uri("/Authenticated.xaml", UriKind.Relative));
}
else
{
MessageBox.Show("The log-in details are invalid!");
}
}
Для той или иной причине, ничего не происходит, когда я нажимаю на вход в систему кнопки. Нет окна сообщений, нет перенаправления, даже исключения. Я не могу понять, что я делаю неправильно. Пожалуйста, помогите мне. Я потратил эти два часа на то, чтобы решить эту проблему.
Почему код req_PropertyChanged не выполняется, хотя я знаю, что изменяется переменная?
Итак, как я могу переписать строку? Извините, но я очень новичок в этих концепциях. –
Я пробовал использовать Result.set, но это дает мне ошибку. –
Хорошо, я решил эту часть. Я просто использовал Result = httpWebStreamReader.ReadToEnd() –