Я разрабатываю приложение, которое взаимодействует с RFID Reader, у меня есть следующая метка, которая берет его значение из Reader (когда я нажимаю на кнопку чтения на оборудовании)

<Label Text="{Binding Statistics.TotalUniqueCount}" />

Я хочу обработать событие, когда текстовое значение изменилось, похоже, что метка не имеет такого события, есть ли элемент управления представлением текста, который может обрабатывать событие изменения текста? Я пытался использовать элемент управления Entry, но проблема в том, что когда я читаю метки RFID, он дает мне правильные значения в первый и второй раз, а в третий раз - неправильные значения, и это происходит только тогда, когда я использую Entry. например, я читаю 3 уникальных тега, это дает мне первый раз 3, когда я читаю больше 2 тегов, число становится 5, но когда я читаю в третий раз еще 3 тега, число становится 1. Я помещаю Entry и Label в на той же странице с той же привязкой метка показывает правильные значения, а запись - неправильные.

Есть ли решение для обработки события при изменении этой привязки (Statistics.TotalUniqueCount)?

0
amal50 24 Апр 2017 в 21:59

2 ответа

Лучший ответ

Как упоминалось в комментариях, похоже, что класс Statistics должен реализовывать INotifyPropertyChanged (именно так привязка может обновлять пользовательский интерфейс при изменении данных). Если это так, вы должны просто подписаться на это же событие в вашем коде. Везде, где у вас есть доступ к этой переменной статистики (в коде позади или viewmodel), просто сделайте

Statistics.PropertyChanged += (o,e)=> 
{ 
    if (e.PropertyName = "TotalUniqueCount")
    {
      //do something
    }
}
2
Ben Reierson 26 Апр 2017 в 05:11

То, что вы можете сделать, это на любой странице / представлении, где находится ваш ярлык, создать новое свойство bindable, которое установлено для вашей привязки. Затем добавьте метод propertyChanged, который будет вызываться при изменении текста на вашем ярлыке.

 public static BindableProperty TextChangedProperty = BindableProperty.Create(nameof(TextChanged), typeof(string), typeof(YourView), string.Empty,  propertyChanged:OnTextChanged);

 public string TextChanged
 {
     get { return (string)GetValue(TextChangedProperty); }
     set { SetValue(TextChangedProperty, value); }
 }

 static void OnTextChanged(BindableObject bindable, object oldValue, object newValue)
 {
    //Do stuff
 }
0
Nick Peppers 25 Апр 2017 в 17:52
43595801