【问题标题】:Handle event when Label Text Change标签文本更改时处理事件
【发布时间】:2017-09-21 14:09:53
【问题描述】:

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

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

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

当这个绑定(Statistics.TotalUniqueCount)发生变化时,有什么解决方案来处理事件吗?

【问题讨论】:

  • 标签没有文本更改事件,因为用户无法更改标签的文本。它只能在代码中完成。由于您使用的是绑定,因此您的 Statistics 类应该实现 INotifyPropertyChanged,任何需要了解新值的类都可以订阅 PropertyChanged 事件。
  • 我的问题是我使用 SDK,所以我对模型和类没有太多控制,我有这样的属性,我必须处理它们

标签: c# xaml xamarin.forms


【解决方案1】:

正如 cmets 中提到的,Statistics 类似乎必须实现 INotifyPropertyChanged(这就是绑定能够在数据更改时更新 UI 的方式)。如果是这种情况,您应该在代码中订阅相同的事件。无论您在哪里可以访问该统计变量(在代码后面或视图模型中),都可以

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

【讨论】:

  • 太好了,非常感谢,但小修复,必须是 (e.PropertyName == "TotalUniqueCount")
【解决方案2】:

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

【讨论】:

  • 自从你发布了这个答案,我做了很多研究和阅读,试图理解你的意思以及当标签的绑定发生变化时我可以在哪里得到事件,我认为这是为了设置值标签的,当标签的值发生变化时不处理事件,当变量发生变化时,我已经有了带有绑定更改的标签,我想要的是在更改标签的文本值之后处理事件并执行其他任务,例如检索数据来自数据库。
  • 也许我不明白您想要做什么,但是当 TextChanged 上的文本更改为新值时,它会调用 OnTextChanged,您仍然可以在其中执行其他任务,例如检索数据。您只需在 OnTextChanged 中强制转换 var view = (YourView)bindable; 即可获取您的任何视图本地引用,因为它是静态的,并且您应该能够从那里调用任何事件/检索您需要的任何数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
相关资源
最近更新 更多