Xamarin:找不到绑定属性 [英] Xamarin: Binding property not found

查看:36
本文介绍了Xamarin:找不到绑定属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此应用在 UWP 中运行良好.除了在 Android 上失败的更基本的属性之一之外,我已经删除了所有内容.它看起来像这样:

This app works just fine in UWP. I have ripped out everything except one of the more basic properties that is failing on Android. It looks like this:

MyPage.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:ViewModels="clr-namespace:MyApp.ViewModels"
             x:Class="MyApp.Views.MyApp">
    <ContentPage.BindingContext>
        <ViewModels:MyViewModel />
    </ContentPage.BindingContext>
    <ContentPage.Content>
        <ScrollView>

            <StackLayout Style="{StaticResource PageForm}">

                <Picker ItemsSource="{Binding Modes}"
                    ItemDisplayBinding="{Binding Value}"
                    SelectedItem="{Binding SelectedMode}" />

            </StackLayout>

        </ScrollView>

   </ContentPage.Content>
</ContentPage>

MyPage.cs

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace MyApp.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MyApp : ContentPage
    {
        public MyApp ()
        {
            InitializeComponent ();
        }
    }
}

MyViewModel.cs

using MyApp.Models;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace MyApp.ViewModels
{
    public class MyViewModel: INotifyPropertyChanged
    {
        List<Mode> _modes;
        Mode _selectedMode;

        public event PropertyChangedEventHandler PropertyChanged;

        public MyViewModel()
        {
            Modes = new List<Mode>()
            {
                new Mode() { Key=ModeType.Mode1, Value="Mode1" },
                new Mode() { Key=ModeType.Mode2, Value="Mode2" }
            };
            SelectedMode = Modes.Single(m => m.Key == ModeType.Mode1);
        }

        public List<Mode> Modes {
            get { return _modes; }
            set {
                _modes = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Modes"));
            }
        }

        public Mode SelectedMode {
            get {
                return _selectedMode;
            }
            set {
                _selectedMode = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SelectedMode"));
            }
        }

    }
}

Mode.cs

namespace MyApp.Models
{
    public enum ModeType { Mode1, Mode2 };
    public class Mode
    {
        public ModeType _key;
        public string _value;
        public ModeType Key {
            get
            {
                return _key;
            }
            set
            {
                _key = value;
            }
        }
        public string Value {
            get
            {
                return _value;
            }
            set
            {
                _value = value;
            }
        }
    }
}

我在调试控制台中看到的是

and what I see in the Debug console is

[0:] Binding: 'Value' property not found on 'MyApp.Models.Mode', target property: 'Xamarin.Forms.Picker.Display'

[0:] Binding: 'Value' property not found on 'MyApp.Models.Mode', target property: 'Xamarin.Forms.Picker.Display'

[0:] Binding: 'SelectedMode' property not found on 'MyApp.ViewModels.'MyApp', target property: 'Xamarin.Forms.Picker.SelectedItem'

就像我说的,如果我将它作为 UWP 应用运行,这会起作用,但是当我在 Android 上尝试它时,它就不起作用了.这就是我能说的所有内容,因为除了上面没有意义的错误之外,它并没有真正说明问题是什么.

Like I said this works if I run it as a UWP app but when I try it on Android it just doesn't work. That's about all I can say since it doesn't really say what the problem is other than the errors above which don't make sense.

视图模型的其余部分实际上有效.应用程序的主要部分工作,我什至可以在这个视图模型上运行代码.如果我创建一个简单的字符串绑定,即使在 Android 上也可以使用.

The rest of the view model actually works. The main part of the app works, I can even run the code on this view model. If I create a simple string binding that will work, even on Android.

感谢任何帮助.

推荐答案

使用单向绑定以避免在调试控制台中出现这些绑定错误.

Use a one way binding to avoid having these binding errors in the debug console.

Text="{Binding [Name], Source={x:Static i18n:Translator.Instance}, Mode=OneWay}"

如果您需要 TwoWay 绑定,请确保绑定的模型对象实现 INotifyPropertyChangedMarkus Michel 表示.

If you need TwoWay binding, make sure the bound model objects implement INotifyPropertyChanged as Markus Michel indicated.

这篇关于Xamarin:找不到绑定属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆