标签文本更改时处理事件

时间:2017-04-24 18:59:23

标签: c# xaml xamarin.forms

我正在开发与RFID阅读器通信的应用程序,我有以下标签,它从阅读器中获取它的价值(当我点击硬件上的阅读按钮时)

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

我想处理和事件,当文本值改变时,看起来标签没有这样的事件,是否有任何文本视图控件可以处理文本更改事件?我尝试使用Entry控件,但问题是当我读取RFID标签时,它给了我第一次和第二次正确的值,但第三次它给了我错误的值,而这只有在我使用Entry时才会发生。 例如,我读了3个独特的标签,它给我第一次3,当我读更多2个标签时,数字变为5,但是当我第三次读到另外3个标签时,数字变为1。 我将Entry和Label放在具有相同Binding的同一页面中,Label显示正确的值,Entry显示错误的值。

当这个绑定(Statistics.TotalUniqueCount)发生变化时,是否有任何处理事件的解决方案?

2 个答案:

答案 0 :(得分:2)

正如评论中所提到的,看起来Statistics类必须实现INotifyPropertyChanged(这是绑定能够在数据更改时更新UI的方式)。如果是这种情况,您应该只在代码中订阅相同的事件。只要您有权访问该Statistics变量(在代码bebhind或viewmodel中),只需执行

Statistics.PropertyChanged += (o,e)=> 
{ 
    if (e.PropertyName = "TotalUniqueCount")
    {
      //do something
    }
}

答案 1 :(得分:0)

您可以做的是在您的标签所在的任何页面/视图上创建一个设置为绑定的新bindableproperty。然后添加一个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
 }