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.

posted @ 2016-07-08 10:24  遥望星空  阅读(662)  评论(0编辑  收藏  举报