我在使用自定义组件时遇到了数据绑定的问题。
我创建了一个名为 IncrementValue 的属性,每次按钮点击时都会递增。
当将其与 Label 绑定时,更改会反映出来。但是,当我将其绑定到自定义组件中的可绑定属性时,它们就无法工作了。
在示例中,我构建了一个名为 Card 的自定义组件,其中包含两个可绑定属性 CardTitle 和 CardIncrement。
由于我刚开始接触 MAUI 甚至 Xamarin,所以我是否漏掉了什么?
以下是代码片段的 Github 链接:https://github.com/814k31/DataBindingExample Card.xaml.cs
我创建了一个名为 IncrementValue 的属性,每次按钮点击时都会递增。
当将其与 Label 绑定时,更改会反映出来。但是,当我将其绑定到自定义组件中的可绑定属性时,它们就无法工作了。
在示例中,我构建了一个名为 Card 的自定义组件,其中包含两个可绑定属性 CardTitle 和 CardIncrement。
由于我刚开始接触 MAUI 甚至 Xamarin,所以我是否漏掉了什么?
以下是代码片段的 Github 链接:https://github.com/814k31/DataBindingExample Card.xaml.cs
namespace DataBindingExample;
public partial class Card : VerticalStackLayout
{
public static readonly BindableProperty CardTitleProperty = BindableProperty.Create(nameof(CardTitle), typeof(string), typeof(Card), string.Empty);
public static readonly BindableProperty CardIncrementProperty = BindableProperty.Create(nameof(CardIncrement), typeof(int), typeof(Card), 0);
public string CardTitle
{
get => (string)GetValue(CardTitleProperty);
set => SetValue(CardTitleProperty, value);
}
public int CardIncrement
{
get => (int)GetValue(CardIncrementProperty);
set => SetValue(CardIncrementProperty, value);
}
public Card()
{
InitializeComponent();
BindingContext = this;
}
}
Card.xaml
<?xml version="1.0" encoding="utf-8" ?>
<VerticalStackLayout
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:databindingexample="clr-namespace:DataBindingExample"
x:DataType="databindingexample:Card"
x:Class="DataBindingExample.Card"
Spacing="25"
Padding="30,0"
VerticalOptions="Center"
BackgroundColor="red"
>
<Label
Text="{Binding CardTitle}"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center"
/>
<Label
Text="{Binding CardIncrement}"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center"
/>
</VerticalStackLayout>
MainPage.xml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DataBindingExample.MainPage"
xmlns:DataBindingExample="clr-namespace:DataBindingExample"
xmlns:ViewModels="clr-namespace:DataBindingExample.ViewModels"
x:DataType="ViewModels:MainPageViewModel"
>
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center"
>
<Label
Text="{Binding IncrementedValue}"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
HorizontalOptions="Center"
/>
<!-- Why doesnt this work? -->
<DataBindingExample:Card CardIncrement="{Binding IncrementedValue}" />
<Button
x:Name="CounterBtn"
Text="Click Me"
SemanticProperties.Hint="Counts the number of times you click"
Command="{Binding IncrementValueCommand}"
HorizontalOptions="Center"
/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
{Binding Path=MyObject.Name, Source={x:Reference thisContentView}}
,其中x:Name="thisContentView"
。BindingContext = this
。