我创建了一个自定义控件,它可以有不同的演示文稿。我为此使用 ContentView 和 ControlTemplate。
现在 ContentView 确实有一些可绑定的属性,并且它没有绑定到 ViewModel。
分别从我的 ContentView 的 XAML 和代码隐藏中检查以下代码:
<ContentView.Resources>
<ControlTemplate x:Key="CarouselTemplate">
<Label x:Name="myLabel"/>
</ControlTemplate>
</ContentView.Resources>
public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(SelectValueContentView));
public string Title
{
get => (string)GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
你能告诉我如何将“myLabel1”绑定到 Title 属性吗?
顺便说一句,我知道它是否在 ContentView 内容中,它将与以下语法绑定:
Binding="{Binding Source={x:Reference selectValueContentView}, Path=Title}"
我还知道,如果 ContentView 绑定到 ViewModel(因为它的父页面是),则以下语法将起作用:
"{TemplateBinding Path=BindingContext.Title}"
所以我知道,如果我创建一个 ViewModel 来“附加”到我的 ContentView,我的问题就会很快得到解决。但我不确定这是一个好的做法,或者是吗?我已经寻找了对此的意见,但没有找到任何结论性的东西,请让我知道我当前的方法是否具有凝聚力,我真的很想学习 MAUI 和 XAML。
非常感谢您的帮助
编辑:这是我使用相关 ContentView 的方式。这是一个简化的代码片段,但我认为你有这个想法。
<ContentPage>
<views:SelectValueContentView x:Name="selectValueContentView" Title="Some title" Kind="Carousel"/>
</ContentPage>
我建议您使用TemplateBinding。
TemplateBinding 标记扩展将 ControlTemplate 中元素的属性绑定到由模板化自定义控件或模板化页面定义的公共属性。
让我们做一个简单的演示,
首先,您应该在 ContentPage Resources 中为自定义控件定义
ControlTemplate
,并通过 SelectValueContentView
的 ControlTemplate 属性使用它。
然后只需设置
Text="{TemplateBinding Title}"
将 Label 的 Text 属性绑定到 ContentView 的 Title 属性。请参考下面的代码片段。
<ContentPage.Resources>
<ControlTemplate x:Key="CarouselTemplate">
<Label x:Name="myLabel" Text="{TemplateBinding Title}"/>
</ControlTemplate>
</ContentPage.Resources>
<ContentPage>
...
<views:SelectValueContentView x:Name="selectValueContentView"
Title="Some title" Kind="Carousel"
ControlTemplate="{StaticResource CarouselTemplate}"/>
</ContentPage>
希望有帮助!