Xamarin.Forms BindableProperty绑定在某些情况下不会触发

时间:2018-02-09 22:24:21

标签: c# binding xamarin.forms

代码示例,显示了BindableProperty的一些奇怪问题。 代码位于GitHub https://github.com/jonilviv/BindableProperty-issue.git 这是一个包含3个项目的Xamarin.Forms解决方案:

  • 通用.NET标准项目
  • Android项目
  • iOS项目
  • UWP项目

通常项目是基于CustomTextView的用户控制ContentView。此控件具有BindableProperty Text。主窗口有3个自定义控件。而且有一种奇怪的行为:

  1. 标签文本属性绑定到ViewModel属性TextValue
  2. 我们在CS代码中更改了Text属性 - 一切正常。
  3. 我们将Text属性绑定到ViewModel属性TextValue。还有一个问题:TextValue更改时 - Text属性未更改。
  4. 我们将静态文本设置为属性Text,一切正常。

1 个答案:

答案 0 :(得分:0)

我认为有两种解决方案:

  1. 直接在propertychanged事件
  2. 中设置标签文字
  3. 将绑定更改为此Text="{Binding Text, Source={x:Reference controlName}}"之类的内容并设置您的控件名称。我认为你现在应该得到这个当前绑定的错误。或者我错了吗?
  4. 已审核的viewmodel代码。这是不正确的。 TextValue属性应该是简单属性,而不是BindableProperty。您需要在viewmodel中实现INotifyPropertyChanged,因此它会更改为更新视图。了解它here

    ==修订==

    将BindableObject作为ViewModel有点奇怪。你得到了很多不需要的方法。

    启动您的代码并遇到绑定错误:

    • [0:]绑定:' TextValue'找不到' App2.CustomTextView',目标属性:' App2.CustomTextView.Text'
    • [0:]绑定:' TextValue'找不到' App2.CustomTextView',目标属性:' App2.CustomTextView.Text'

    我认为BindingDataContext未正确设置为该元素,因此它不会更新文本。设置名称形式MainPage如x:Name =" Page"并像这样绑定

    • Text =" {Binding BindingContext.TextValue,Source = {x:Reference Page}}"