当标签文本更改

问题描述:

我正在开发应用,该应用与RFID阅读器通信,我有以下的标签这需要它的价值从阅读器(当我在读按钮点击硬件)处理事件当标签文本更改

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

我想处理和事件当文本值改变,它看起来像标签没有这样的事件,有没有任何文本视图控件可以处理文本更改事件?我尝试使用Entry控制,但是当我读取RFID标签时,它给了我第一次和第二次正确的值,但是第三次​​给了我错误的值,而这只有在使用Entry时才会发生。例如,我读了3个独特的标签,它给了我第一次3,当我读了更多的2个标签时,数字变成了5,但是当我第三次读取另外3个标签时,数字变成1. 我把Entry和在同一个页面中使用相同的绑定标签,标签显示正确的值,并且条目显示错误的值。

有没有解决方案来处理这个绑定(Statistics.TotalUniqueCount)更改时的事件?

+1

标签没有一个文本改变事件,因为没有办法为用户更改标签的文本。它只能在代码中完成。由于您正在使用绑定,因此您的Statistics类应实现INotifyPropertyChanged,并且需要了解新值的任何类都可以订阅PropertyChanged事件。 – Jason

+0

我使用SDK的问题,所以我没有太多的模型和类的控制,我有这样的属性,我必须处理它们 – amal50

正如在评论中提到的,它看起来像统计类必须实现INotifyPropertyChanged的(这是结合如何能够更新UI当数据的变化)。如果是这样的话,你应该只在你的代码中订阅同一个事件。无论你有权访问统计变量(代码bebhind或视图模型),只是做

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

太好了,非常感谢,但小修复,它必须是(e.PropertyName ==“TotalUniqueCount”) – amal50

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

,因为你发布了这个答案,我做了大量的研究并阅读试图了解你的意思,当标签的绑定发生变化时我可以获取事件,我认为这用于设置标签的值,而不是在标签的值发生变化时处理事件,我已经有了标签当变量发生变化时绑定发生变化,我想要的是在更改标签的文本值以处理事件并执行其他任务(如从数据库中检索数据)之后。 – amal50

+0

也许我不明白你想要做什么,但是当TextChanged上的文本更改为新值时,它会调用OnTextChanged,您仍然可以执行其他任务,如检索数据。你只需要在OnTextChanged中投入'var view =(YourView)bindable;'来获得你的任何视图本地引用,因为它是静态的,从那里你应该能够调用任何事件/检索你想要的任何数据需要。 – Nick