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>
。我可能会错过其他东西。
我认为应该发生的是:
ItemSource
的二传手终于被击中。但是,通过逐步执行这些步骤,似乎似乎停止了步骤2的某处。我是否在这里遗漏了一些明显的内容? AFAICT应该可以。