我正在尝试使用数据绑定设置组件。这基本上是一个单独的内容视图,它具有Item
类型属性Item
并支持绑定。以下是绑定的定义:
public static readonly BindableProperty ItemProperty
= BindableProperty.Create(
nameof(Item), typeof(Item), typeof(ItemComponent), null,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: ItemPropertyChanged);
private readonly ItemComponentViewModel vm;
static void ItemPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = (ItemComponent)bindable;
view.Item = (Item)newValue;
}
public Item Item
{
get => (Item)GetValue(ItemProperty);
set
{
SetValue(ItemProperty, value);
if (vm != null) vm.Data = value; // break point here
}
}
该项目似乎没有绑定。注释行有一个断点并且没有中断。完整的源代码在这里:https ://github.com/neville-nazerane/xamarin-component-sample
上面的代码可以在ItemComponent
类中找到。该组件在MainPage
类中被调用。
更新
只是为了解释我要模拟的内容以及原因:
为什么我们在页面中使用 MVVM?虽然通过直接使用后面的代码我们将获得更好的类型安全性和性能,但当页面的逻辑变得更大时,使用视图模型处理它并拥有一个简单绑定到它的视图会变得更简洁。
为什么我们有组件?这样我们就可以重用我们打算与某些功能一起使用的 UI。如果这个功能变得复杂,它可能需要一个视图模型,原因与上面解释的相同。因此,如果页面需要视图模型,我不明白为什么组件在某些时候也不需要它们。
考虑到这一点,这确实感觉像是一个粒子要求,没有容易找到的例子。