Xamarin XF绑定。。属性未找到,但仅适用于我的Android应用程序,不适用于iOS

Xamarin XF绑定。。属性未找到,但仅适用于我的Android应用程序,不适用于iOS,xamarin,xamarin.forms,Xamarin,Xamarin.forms,下面是我在应用程序输出中看到的错误消息: Binding: 'GearTapBtnCmd' property not found on 'Memorise.HomeTabPage', target property: 'Memorise.HomeTabPage.RightIconTapCommand' HomeTabPage.xaml <?xml version="1.0" encoding="UTF-8"?> <t:HeadingS

下面是我在应用程序输出中看到的错误消息:

Binding: 'GearTapBtnCmd' property not found on 'Memorise.HomeTabPage', 
target property: 'Memorise.HomeTabPage.RightIconTapCommand'
HomeTabPage.xaml

<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingScrollableView
    PageTitle="Home"
    PageTitleVisible="True"
    RightIconSource="{DynamicResource GearIcon}"
    RightIconTapCommand="{Binding GearTapBtnCmd, Mode=OneWay}"
public partial class HomeTabViewModel : BaseViewModel
{
    public IAsyncCommand GearTapBtnCmd { get; private set; }
    
    public HomeTabViewModel()
    {
        GearTapBtnCmd = new MvvmHelpers.Commands.AsyncCommand(OpenPrefAsync);
    }
<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingViewBase 
    Shell.NavBarIsVisible="false"
    x:Class="Memorise.Templates.HeadingScrollableView"
    x:Name="ContentPage"
    xmlns:ffimageloadingsvg="clr-namespace:FFImageLoading.Svg.Forms;assembly=FFImageLoading.Svg.Forms"
    xmlns:t="clr-namespace:Memorise.Templates"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns="http://xamarin.com/schemas/2014/forms"  >
    <t:HeadingViewBase.Content>
       <Grid 
          <Grid.GestureRecognizers>
             <TapGestureRecognizer Command="{Binding Source={x:Reference ContentPage}, Path=RightIconTapCommand}"/>
          </Grid.GestureRecognizers>
       </Grid>
    </t:HeadingViewBase.Content>
</t:HeadingViewBase>
HomeTabViewModel

<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingScrollableView
    PageTitle="Home"
    PageTitleVisible="True"
    RightIconSource="{DynamicResource GearIcon}"
    RightIconTapCommand="{Binding GearTapBtnCmd, Mode=OneWay}"
public partial class HomeTabViewModel : BaseViewModel
{
    public IAsyncCommand GearTapBtnCmd { get; private set; }
    
    public HomeTabViewModel()
    {
        GearTapBtnCmd = new MvvmHelpers.Commands.AsyncCommand(OpenPrefAsync);
    }
<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingViewBase 
    Shell.NavBarIsVisible="false"
    x:Class="Memorise.Templates.HeadingScrollableView"
    x:Name="ContentPage"
    xmlns:ffimageloadingsvg="clr-namespace:FFImageLoading.Svg.Forms;assembly=FFImageLoading.Svg.Forms"
    xmlns:t="clr-namespace:Memorise.Templates"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns="http://xamarin.com/schemas/2014/forms"  >
    <t:HeadingViewBase.Content>
       <Grid 
          <Grid.GestureRecognizers>
             <TapGestureRecognizer Command="{Binding Source={x:Reference ContentPage}, Path=RightIconTapCommand}"/>
          </Grid.GestureRecognizers>
       </Grid>
    </t:HeadingViewBase.Content>
</t:HeadingViewBase>
HeadinsScrollableView.xaml

<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingScrollableView
    PageTitle="Home"
    PageTitleVisible="True"
    RightIconSource="{DynamicResource GearIcon}"
    RightIconTapCommand="{Binding GearTapBtnCmd, Mode=OneWay}"
public partial class HomeTabViewModel : BaseViewModel
{
    public IAsyncCommand GearTapBtnCmd { get; private set; }
    
    public HomeTabViewModel()
    {
        GearTapBtnCmd = new MvvmHelpers.Commands.AsyncCommand(OpenPrefAsync);
    }
<?xml version="1.0" encoding="UTF-8"?>
<t:HeadingViewBase 
    Shell.NavBarIsVisible="false"
    x:Class="Memorise.Templates.HeadingScrollableView"
    x:Name="ContentPage"
    xmlns:ffimageloadingsvg="clr-namespace:FFImageLoading.Svg.Forms;assembly=FFImageLoading.Svg.Forms"
    xmlns:t="clr-namespace:Memorise.Templates"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns="http://xamarin.com/schemas/2014/forms"  >
    <t:HeadingViewBase.Content>
       <Grid 
          <Grid.GestureRecognizers>
             <TapGestureRecognizer Command="{Binding Source={x:Reference ContentPage}, Path=RightIconTapCommand}"/>
          </Grid.GestureRecognizers>
       </Grid>
    </t:HeadingViewBase.Content>
</t:HeadingViewBase>
出现警告消息,但代码似乎有效。有人知道是什么导致了警告信息吗?

如何避免“警告” 将
HomeTabPage
的构造函数更改为

public HomeTabPage()
{
    // Set the BindingContext before the page is created!
    BindingContext = vm = new HomeTabViewModel(); 
    InitializeComponent();
}
为什么会出现“警告”? 在您发布的代码上,当您创建
HomeTabPage
like

public HomeTabPage()
{
    InitializeComponent();
    BindingContext = vm = new HomeTabViewModel(); 
}
发生的情况是,
HomeTabPage
在为该
页面设置
BindingContext
之前被初始化。。。但是初始值设定项确实为其基本
页面找到了
BindingContext
,即您设置为

public HeadingScrollableView()
{
    InitializeComponent();
    BindingContext = this;
}
因此,由于
BindingContext
设置为
this
初始值设定项所做的是在源
HomeTabPage
或其继承的任何对象中查找路径
GearTapBtnCmd
,但未找到该路径:然后显示“警告”

稍后,设置了
HomeTabPage
BindingContext
,一切正常

当您按照我的建议操作时(在
页面
初始化之前设置
BindingContext
),会立即找到
GearTapBtnCmd
,并且不会显示任何警告

为什么“警告”只出现在Android上? 遗憾的是,我没有这个问题的答案,但值得注意的是,警告只在调试时出现,而不是在重建项目时出现(!)。这意味着Android的调试器应该与iOS的调试器有根本的不同,它位于警告的后面。。。要确切了解为什么这种情况只发生在Android中,您可以在GitHub中直接询问Xamarin.Forms开发团队。。。(如果您发现了,请告诉我们)


至于你的问题

有人知道是什么导致了警告信息吗


我想我可能已经给了你一个答案:D

可能是因为binding
BindingContext=this在“HeadingScrollableView”类中。检查