在 .NET9 MAUI 中,如何设置 DataType 和 BindingContext 以免收到警告?

问题描述 投票:0回答:1

我已在 .NET9 MAUI 中打开 CompiledBindings,我正在尝试找出如何解决所有警告。 在我后面的代码中,我有一个名为 Count 的 BindableProperty:


public partial class CountRound : ContentView
{
    public static readonly BindableProperty CountProperty =
        BindableProperty.Create("Count", typeof(int), typeof(CountRound), 0); 
    public int Count
    {
        get => (int)GetValue(CountProperty);
        set => SetValue(CountProperty, value);
    }
    public CountRound()
    {
        InitializeComponent();
    }
}

在.NET8中,我为ContentView设置BindingContext并将标签文本绑定到Count:

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:models="clr-namespace:MyApp.Models"
             x:Class="MyApp.ContentViews.CountRound"
             BindingContext="{Binding Source={RelativeSource Self}}">
    <Border x:Name="CountBorder"
        StrokeShape="Ellipse"
        StrokeThickness="2"
        Stroke="{Binding Source={x:Static models:SiteConfiguration.RoundBorderColor}}"
        BackgroundColor="White"
        Opacity=".85"
        HeightRequest="24">
        <Label 
            Text="{Binding Count}"
            FontSize="12"
            TextColor="Black"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            HorizontalTextAlignment="Center"
            VerticalTextAlignment="Center"
            Padding="0"/>
    </Border>
</ContentView>

BindingContext 的 DataContext 将自身解析为 CountRound,标签的文本正确解析为 Count,并且 Border Stroke 识别出它是一种 Color: enter image description here enter image description here enter image description here

在 .NET9 中,此代码会导致编译器警告应在 BindingContext 和 Border Stroke 行上设置 DataType,因此我在 ContentView 和 Border Stroke 上发送了 DataType:

<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:models="clr-namespace:JMoApp.Models"
             xmlns:contentViews="clr-namespace:JMoApp.ContentViews"
             x:Class="JMoApp.ContentViews.CountRound"
             x:DataType="contentViews:CountRound"
             BindingContext="{Binding Source={RelativeSource Self}}">
    <Border x:Name="CountBorder"
            StrokeShape="Ellipse"
            StrokeThickness="2"
            Stroke="{Binding x:DataType=Color, Source={x:Static models:SiteConfiguration.RoundBorderColor}}"
            BackgroundColor="White"
            Opacity=".85"
            HeightRequest="24">
        <Label 
            Text="{Binding Count}"
            FontSize="12"
            TextColor="Black"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            HorizontalTextAlignment="Center"
            VerticalTextAlignment="Center"
            Padding="0"  />
    </Border>
</ContentView>

这解决了关于边框描边的编译器警告,但没有解决绑定上下文的警告,即使它将 BindingContext 的 DataContext 解析为正确的类型: enter image description here

然后我将 DataType 声明移至 BindingContext 内: enter image description here

确实清除了该行上的编译器警告,但现在标签文本已解析为数据类型“BindingExtension”,并且无法再解析属性“Count” enter image description here

所以我将 DataType 添加回 ContenctView,但这会创建一个新警告: enter image description here enter image description here

当我将 BindingContext 设置为 CountRound 时,为什么它会解析为 BindingExtenstion? 为什么需要在ContentView和BindingContext中设置DataType? 数据类型应该如何/在哪里定义?

binding maui .net-9.0
1个回答
0
投票

对于自定义控件,您不必为整个类设置

BindingContext
。如果你想将
Text
属性绑定到代码后面的
Count
属性,试试这个,

设置自定义控件的 x:Name,

<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp.CountRound"
             ...
             x:Name="myContentView">

并使用 x:Reference 表达式,

<Label 
    Text="{Binding Count,Source={x:Reference myContentView}}"

欲了解更多信息,请参阅x:参考标记扩展

© www.soinside.com 2019 - 2024. All rights reserved.