使用DataBinding MainText进行Xamarin.Forms初始化

时间:2017-02-03 17:00:16

标签: c# xamarin.forms

我是Xamarin.Forms的新手。当我创建Forms Xaml页面时,VS2015将自动生成如下代码。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"           
         x:Class="MyProject.CountList">

<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
...

我想知道以下行的含义是什么。它似乎是数据绑定,但我不知道试图绑定的标签是什么。什么是&#39; MainText&#39;标签在哪里?

<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />

提前致谢!

1 个答案:

答案 0 :(得分:2)

此部分Text="{Binding MainText}"表示Text的{​​{1}}属性(在本例中)具有与名为Label的属性的数据绑定。

此属性应该在具有此视图数据绑定的类中可用。设置此类的最明显方法是通过代码隐藏并设置页面的MainText。这可以是任何东西。因此可以BindingContext将代码隐藏直接绑定到视图,或者它可以是另一个充当 ViewModel PageModel 的类。

另一种不太明显的方法是使用MVVM框架。根据框架,View和ViewModels(或Page和PageModels)通过设置一些映射或命名约定绑定在一起。在后一种情况下,如果您的页面被称为“MyListPage”&#39;寻找名为&#39; MyListPageModel&#39;的文件(或更确切地说是类)。在运行时,框架将为您完成绑定。

根据您的问题考虑这个简单的例子。这是您的页面,我们称之为this

SimpleLabelPage.xaml

如果您右键点击该文件,请点击&#39;代码&#39; (在Visual Studio中)您将转到代码隐藏<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyProject.CountList"> <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" /> </ContentPage> 。这看起来像这样:

SimpleLabelPage.xaml.cs

现在,在运行应用程序时,您应该在UI中看到数据绑定文本。

您也可以将它移动到自己的类中:

using Xamarin.Forms;

namespace StackOverflowAwesomeness
{
    public string MainText { get; set; }

    public partial class SimpleLabelPage : ContentPage
    {
        public SimpleLabelPage ()
        {
            InitializeComponent ();

            MainText = "Hello from bindings!";
            BindingContext = this;
        }
    }
}

然后将代码隐藏中的代码更改为:

public class SimpleLabelPageModel
{
    public string MainText { get; set; }
}

最终会产生相同的效果,但您可以通过这种方式将逻辑与您的视图区分开来。

这是基本的数据绑定101.要阅读更多信息,请参阅Xamarin documentation

您可能还想查看MvvmCross或FreshMvvm和using Xamarin.Forms; namespace StackOverflowAwesomeness { public partial class SimpleLabelPage : ContentPage { public SimpleLabelPage () { InitializeComponent (); var pageModel = new SimpleLabelPageModel(); pageModel.MainText = "Hello from bindings!"; BindingContext = pageModel; } } } 等框架,或者使用INotifyPropertyChanged