到目前为止,大多数使用Xamarin.Forms的示例都使用C#来构建UI。我更喜欢将XAML用于UI,并将其数据绑定到ViewModels。
我在将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>
该组件有效:我确实看到了&#39; Master&#39;和&#39;细节&#39;标签。不显示绑定标签(在BindingContext对象上)。
我已经使用了不同组合的负载,但我仍然坚持:这是如何工作的?我的绑定是不正确的(如果它在&#34; ContentPage&#34;),我不能绑定到.Master和.Detail属性等?怎么应该&#34;菜单&#34;和&#34;详细信息页&#34;绑定看起来像?
如果有人能帮助我,那将是一个巨大的帮助!下一步是在.Master中按下按钮时将更改.Detail。提前谢谢!
答案 0 :(得分:16)
你的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" }
};
}
这很好用。在您的情况下,您可能希望视图模型具体类型而不是匿名类型,但您可以理解。