zoukankan      html  css  js  c++  java
  • XAML / Self binding, bindingcontext

    Hello,

    I want to bind the text property of a editor element to BindableProperty. Here is what I tried:

    MyForm.xaml

    <?xml version="1.0" encoding="UTF-8"?>
    <ContentPage x:Class="Com.Acme.MyForm"
                            xmlns="http://xamarin.com/schemas/2014/forms"
                            xmlns:local="clr-namespace:Com.Acme;assembly=Com.Acme"
                            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                            >
    
        <ContentPage.Content>
            <Grid>
                <Label Text="1" />
                <Editor BindingContext="{local:MyForm}" Grid.Column="1" Text="{Binding Path=MyProperty}" />
            </Grid>
        </ContentPage.Content>
    </ContentPage>
    

    MyForm.cs

    namespace Com.Acme {
    
    public partial class MyForm : ContentPage {
    
        public static readonly BindableProperty MyPropertyProperty = BindableProperty.Create(
                                                                    "MyProperty",
                                                                    typeof(Object),
                                                                    typeof(MyForm),
                                                                    null,
                                                                    BindingMode.TwoWay,
                                                                    null,
                                                                    null,
                                                                    null,
                                                                    null,
                                                                    null
                                                                );
    
        public MyForm () {
            InitializeComponent ();
        }
    
        public Object MyProperty {
    
            get { return GetValue (MyPropertyProperty); }
            set { SetValue(MyPropertyProperty, value); }
    
        }
    
    }
    

    While the code above is running, I see around 60 block of this exception (all are different but similar) in Application Output panel and application exits in emulator:

    [mono-rt]   at <unknown> <0xffffffff>
    [mono-rt]   at (wrapper managed-to-native) System.Reflection.MonoCMethod.InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) <IL 0x0001c, 0xffffffff>
    [mono-rt]   at System.Reflection.MonoCMethod.InternalInvoke (object,object[]) [0x00002] in /Users/builder/data/lanes/2058/58099c53/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:535
    [mono-rt]   at System.Activator.CreateInstance (System.Type,bool) [0x000af] in /Users/builder/data/lanes/2058/58099c53/source/mono/mcs/class/corlib/System/Activator.cs:321
    [mono-rt]   at System.Activator.CreateInstance (System.Type) [0x00000] in /Users/builder/data/lanes/2058/58099c53/source/mono/mcs/class/corlib/System/Activator.cs:214
    [mono-rt]   at Xamarin.Forms.Xaml.CreateValuesVisitor.Visit (Xamarin.Forms.Xaml.ElementNode,Xamarin.Forms.Xaml.INode) <IL 0x00192, 0x00c57>
    [mono-rt]   at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor,Xamarin.Forms.Xaml.INode) <IL 0x000b8, 0x006b7>
    [mono-rt]   at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor,Xamarin.Forms.Xaml.INode) <IL 0x00058, 0x0038e>
    [mono-rt]   at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor,Xamarin.Forms.Xaml.INode) <IL 0x0008f, 0x00576>
    

    Where am I doing something wrong?

    Well... I solved it. I'm writing the solution here.

    First, I set the name of content page by x:Name directive and removed imported local namespace:

    <?xml version="1.0" encoding="UTF-8"?>
    <ContentPage x:Class="Com.Acme.MyForm"
                 x:Name="xMyForm"
                 xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 >
                 ...
    

    then I changed BindingContext property as below:

    ...
    <Editor BindingContext="{x:Reference Name=xMyForm}" Grid.Column="1" Text="{Binding Path=MyProperty}" />
    ...
    

    now MyProperty value appears in the editor.

  • 相关阅读:
    你不可不知的50个互联网知识
    C算法学习笔记(2)-二叉查找树
    laravel 项目本地版本为5.5,线上mysql 为5.7.21版本,执行严格模式
    mysql中bigint、int、mediumint、smallint与tinyint的取值范围
    Laravel 登录后清空COOKIE 方法
    PHP进阶与redis锁限制并发访问功能示例
    微信开放平台开发——网页微信扫码登录(OAuth2.0)
    一起谈.NET技术,Nhibernate入门与demo 狼人:
    一起谈.NET技术,Siverlight与WCF通信之双工netTcp实现视频对话 狼人:
    一起谈.NET技术,详细述说ADO超时相关问题介绍 狼人:
  • 原文地址:https://www.cnblogs.com/zjoch/p/5652503.html
Copyright © 2011-2022 走看看