我是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" />
提前致谢!
答案 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
。