Xamarin中的XAML中MasterDetailPage的数据绑定Xamarin.Forms
到目前为止,大多数使用Xamarin.Forms的示例都使用C#构建UI。我更喜欢使用XAML作为UI,并将其绑定到ViewModels。Xamarin中的XAML中MasterDetailPage的数据绑定Xamarin.Forms
我在使用Xamarin.Forms.MasterDetailPage与XAML结合时遇到了问题,我似乎无法将C#示例移植到XAML + ViewModels。
这是我至今为止XAML:
<?xml version="1.0" encoding="UTF-8" ?>
<MasterDetailPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:NSContacten;assembly=NSContacten"
x:Class="MasterDetailExample.Main"
Title="Master Detail Example">
<MasterDetailPage.Master BindingContext="{Binding Menu}">
<ContentPage Padding="5, 25">
<StackLayout Orientation="Vertical">
<Label Text="Master" HorizontalOptions="Center" />
<Label Text="{Binding Subtitle}" HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail BindingContext="{Binding Detailpage}">
<ContentPage Padding="5, 25">
<StackLayout Orientation="Vertical">
<Label Text="Detail" HorizontalOptions="Center" />
<Label Text="{Binding Subtitle}" HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
部件的工作原理:我看到“主”和“详细信息”标签。不显示绑定标签(在BindingContext对象上)。
我已经使用了不同组合的加载,但我仍然卡住:这是如何工作的?我的绑定是不正确的(它应该在“ContentPage”上),我无法绑定到.Master和.Detail属性等。 “Menu”和“Detailpage”绑定应该如何?
如果有人能帮助我,这将是一个巨大的帮助!下一步是在.Master中按下按钮时.Detail将被更改。提前致谢!
XAML中几乎是好的,但:
- 的
{BindingContext}
上的属性无效,应在ContentPage
元素 -
MasterDetailPage.Master
需要一个Page.Title
进行设置,或者抛出。
这里是正确的XAML的工作对我来说:
<?xml version="1.0" encoding="UTF-8" ?>
<MasterDetailPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:NSContacten;assembly=NSContacten"
x:Class="MasterDetailExample.Main"
Title="Master Detail Example">
<MasterDetailPage.Master>
<ContentPage Padding="5, 25" BindingContext="{Binding Menu}" Title="Master">
<StackLayout Orientation="Vertical">
<Label Text="Master" HorizontalOptions="Center" />
<Label Text="{Binding Subtitle}" HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<ContentPage Padding="5, 25" BindingContext="{Binding Detailpage}">
<StackLayout Orientation="Vertical">
<Label Text="Detail" HorizontalOptions="Center" />
<Label Text="{Binding Subtitle}" HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
我一个匿名类型的页面视图模型进行了测试:
public MyMDPage()
{
InitializeComponent();
BindingContext = new {
Menu = new { Subtitle = "I'm Master" },
Detailpage = new { Subtitle = "I'm Detail" }
};
}
,这工作得很好。在你的情况下,你可能需要具体的类型而不是你的视图模型的匿名类型,但你明白了。
谢谢Stephane,那非常棒! .Master上的Page.Title可以被删除(至少对iOS而言,没有检查过其他平台),但MasterDetailPage的“BindingContext”是我解决方案的关键。再次感谢! – MarcoK
@MarcoK:如果标题不是强制性的,那么您没有运行最新版本。做一个nuget更新 –
感谢一堆这个答案。虽然我在Xamarin.Forms中使用可绑定属性,但逻辑相同。 –
感谢您提出这个问题!我花了一天的时间试图弄清楚,我不会没有这个问题。 –