我正在开发与RFID阅读器通信的应用程序,我有以下标签,它从阅读器中获取它的价值(当我点击硬件上的阅读按钮时)
<Label Text="{Binding Statistics.TotalUniqueCount}" />
我想处理和事件,当文本值改变时,看起来标签没有这样的事件,是否有任何文本视图控件可以处理文本更改事件?我尝试使用Entry控件,但问题是当我读取RFID标签时,它给了我第一次和第二次正确的值,但第三次它给了我错误的值,而这只有在我使用Entry时才会发生。 例如,我读了3个独特的标签,它给我第一次3,当我读更多2个标签时,数字变为5,但是当我第三次读到另外3个标签时,数字变为1。 我将Entry和Label放在具有相同Binding的同一页面中,Label显示正确的值,Entry显示错误的值。
当这个绑定(Statistics.TotalUniqueCount)发生变化时,是否有任何处理事件的解决方案?
答案 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
}