首页 > 解决方案 > 未找到发布属性中的 Xamarin.Forms 绑定

问题描述

让我发疯的问题)人们帮助(

有一个简单的 Xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Kitchener"
             x:Class="Kitchener.MainPage"
             xmlns:al="clr-namespace:AiForms.Layouts;assembly=AiForms.Layouts"
             xmlns:viewModel="clr-namespace:Kitchener.ViewModels;assembly=Kitchener"
             x:Name="_this">

    <ContentPage.BindingContext>
        <viewModel:KitchenerMainPageVm />
    </ContentPage.BindingContext>

    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="2*" />
            <RowDefinition Height="40" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Label Text="{Binding MessageText}"  
               TextColor="{Binding MessageTextColor}"
               IsVisible="{Binding MessageTextVisible}"
               HorizontalOptions="Center"
               VerticalOptions="Center"  Grid.Row="1" FontSize="30" Margin="0,20,0,20" />

        <StackLayout Grid.Row="2" Orientation="Horizontal">

            <Button Text="#" Command="{Binding ShowHideSettings}" WidthRequest="40"/>

            <StackLayout IsVisible="{Binding SettingIsVisible}" Orientation="Horizontal" HorizontalOptions="FillAndExpand">

                <Entry Placeholder="Url Bullet Server"
                       FontSize="15"
                       Text="{Binding BaseUrl, Mode=TwoWay}" 
                       Completed="BaseUrl_OnCompleted"
                       HorizontalOptions="FillAndExpand"/>

            </StackLayout>
        </StackLayout>
    </Grid>

</ContentPage>

有一个简单的 ViewModel:

public class KitchenerMainPageVm : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;

            private string _baseUrl;

            public string BaseUrl
            {
                set
                {
                    _baseUrl = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("BaseUrl"));

                    Settings.BaseUrlBulletHttpServer = _baseUrl;
                }
                get => _baseUrl;
            }

            private string _messageText = "Соединение...";

            public string MessageText
            {
                set
                {
                    _messageText = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MessageText)));
                }
                get
                {
                    return _messageText;
                }
            }

            private bool _messageTextVisible = false;

            public bool MessageTextVisible
            {
                set
                {
                    _messageTextVisible = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("MessageTextVisible"));
                }
                get
                {
                    return _messageTextVisible;
                }
            }

            private Color _messageTextColor = Color.AliceBlue;

            public Color MessageTextColor
            {
                set
                {
                    _messageTextColor = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("MessageTextColor"));
                }
                get
                {
                    return _messageTextColor;
                }

            }

            private bool _buttonStackVisible = true;

            public bool ButtonStackVisible
            {
                set
                {
                    _buttonStackVisible = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ButtonStackVisible"));
                }
                get
                {
                    return _buttonStackVisible;
                }
            }

            private bool _settingIsVisible;

            public bool SettingIsVisible
            {
                set
                {
                    _settingIsVisible = value;

                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SettingIsVisible"));
                }
                get
                {
                    return _settingIsVisible;
                }
            }


            public ICommand ShowHideSettings { protected set; get; }

            private void _showHideSettings()
            {
                SettingIsVisible = !SettingIsVisible;
            }


            public KitchenerMainPageVm()
            {
                BaseUrl = Settings.BaseUrlBulletHttpServer;

                ShowHideSettings = new Command(_showHideSettings);
            }
    }

在调试组装模式下,一切正常,但是一旦我在发布组装模式下收集所有这些工作,我的一些绑定和团队就会失败。

我在部署时看到的:

[0:] 绑定:'Kitchener.ViewModels.KitchenerMainPageVm' 上找不到'MessageTextVisible' 属性,目标属性:'Xamarin.Forms.Label.IsVisible' [0:] 绑定:'Kitchener.ViewModels 上找不到'MessageTextColor' 属性.KitchenerMainPageVm',目标属性:'Xamarin.Forms.Label.TextColor'[0:] 绑定:'MessageText'在'Kitchener.ViewModels.KitchenerMainPageVm'上找不到属性,目标属性:'Xamarin.Forms.Label.Text'

有绑定SettingIsVisible,,其余的不起作用BaseUrlButtonStackVisible无论我做什么......并且相同的命令不起作用......

我已经重新组装了一百次,试图在真实设备(Android 7.1)上运行它,在模拟器上,它没有帮助......

我使用VisualStudio 2017 库程序集的参数http://joxi.ru/823kkB8FJNGa82 Android项目: http: //joxi.ru/5md77LnikRZ8xr SDK版本编译器8.1

标签: xamarin.forms

解决方案


我在链接器中发现了问题。有两种解决方案:要么在此处完全禁用 joxi.ru/vAW339ei1vX6bA,要么使用属性 [Android.Runtime.Preserve (AllMembers = true)]


推荐阅读