Xamarin可绑定属性永远不会设置

时间:2018-08-23 16:03:14

标签: c# xamarin

MyCustomRenderer.cs (此处的设置程序永远不会被点击)

public class MyGrid : Grid
{

    public static readonly BindableProperty ItemSourceProperty = BindableProperty.Create("ItemSource", typeof(Cat), typeof(MyGrid), null);
    public Cat ItemSource
    {
        get { return (Cat)GetValue(ItemSourceProperty); }
        set { SetValue(ItemSourceProperty, value); }
    }
    ...
}

MyPage.xaml (这是CustomRenderer的使用方式)

...
<ContentPage.BindingContext>
    <ViewModels:MyViewModel />
</ContentPage.BindingContext>
...
<CustomRenderers:MyGrid ItemSource="{Binding TheCat}" />
...

MyViewModel.cs (以下是视图模型)

public class MyViewModel : INotifyPropertyChanged
{
    Cat _cat;

    public event PropertyChangedEventHandler PropertyChanged;

    public Cat TheCat {
        get { return _cat; }
        set {
            _cat = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("TheCat"));
        }
    }
}

MyPage.xaml.cs (这是所有内容的开始;这是我们设置TheCat的位置)

public partial class MyPage : ContentPage
{
    public ComparisonPage (Cat theCat)
    {
        InitializeComponent ();

        var viewModel = (MyViewModel)BindingContext;
        viewModel.TheCat = theCat;
    }
}

我有一个类似版本的代码可以正常工作。我能想到的唯一区别不是绕过Cat,而是绕过ObservableCollection<Cat>。我可能会错过其他东西。

我认为应该发生的是:

  1. MyPage.xaml.cs 设置TheCat
  2. MyViewMode.cs 处理设置TheCat,如果有人在听,则会引发更改事件。
  3. MyPage.xaml 将TheCat绑定到正在侦听的 MyCustomRenderer.cs
  4. MyCustomRenderer.cs ItemSource的二传手终于被击中。

但是,通过逐步执行这些步骤,似乎似乎停止了步骤2的某处。我是否在这里遗漏了一些明显的内容? AFAICT应该可以。

0 个答案:

没有答案