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.

  • 相关阅读:
    sql server 查询出的结果集,拼接某一列赋值给一个变量
    sql server显示某一列中有重复值的行
    webservice 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下运行,将出现此问题
    Merge Into 用法
    修改TFS与本地源代码映射路径
    Thinkphp5.0第五篇
    aircrack-ng wifi密码破解
    Thinkphp5.0第四篇
    Thinkphp5.0第三篇
    Thinkphp5.0第二篇
  • 原文地址:https://www.cnblogs.com/zjoch/p/5652503.html
Copyright © 2011-2022 走看看