如标题所示,我正在尝试将Person对象传递给自定义控件,而不是单独传递每个属性。
因此,这样做:
因此,这样做:
<controls:PersonControl
Person="{Binding Person}"
ControlTemplate="{StaticResource PersonControlTemplate}">
</controls:PersonControl>
与此实现方式(参考这篇文章)相比,可以使用以下方式进行操作:
<controls:PersonControl
Name="{Binding Person.Name}"
Age="{Binding Person.Age}"
ControlTemplate="{StaticResource PersonControlTemplate}">
</controls:PersonControl>
我尝试改变PersonControl代码后台中的bindable属性标识,但它没有起作用。实际上,我只得到了一个空白屏幕。
所以: 1-这是否可能(我知道这称为bindable property,但它也可以采取对象吗? 并且 2-如果不行,那么推荐的方法是什么?
我之所以想这样做是因为人物对象可能会随着时间增长而增加,我宁愿只更新自定义控件而不是消耗页面及其视图模型。
更新: 以下是PersonControl代码:
public partial class PersonControl : ContentView
{
public static readonly BindableProperty PersonProperty = BindableProperty.Create(
nameof(Person),
typeof(Person),
typeof(PersonControl),
string.Empty);
public string Name
{
get { return this.Person.Name; }
}
public Person Person
{
get { return (Person)GetValue(PersonProperty); }
set { SetValue(PersonProperty, value); }
}
public PersonControl()
{
InitializeComponent();
}
}
以下是 PersonControl 的 XAML 代码:
<ContentView.Content>
<StackLayout>
<Label Text="{TemplateBinding Person.Name, Mode=OneWay}"/>
</StackLayout>
</ContentView.Content>
最后是消耗页面:
<ContentPage.Resources>
<ControlTemplate x:Key="PersonControlTemplate">
<controls:PersonControl></controls:PersonControl>
</ControlTemplate>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout Spacing="10" x:Name="layout">
<controls:PersonControl
Person="{Binding Person}"
ControlTemplate="{StaticResource PersonControlTemplate}"></controls:PersonControl>
</StackLayout>
</ContentPage.Content>
根据MVVM模式,person对象是页面视图模型上的属性。
更新:我按照这篇教程尝试将可绑定字符串类型替换为对象,但仍然没有成功。