如何在XAML页眉中设置页面范围的BindingContext

如何在XAML页眉中设置页面范围的BindingContext,xaml,xamarin,data-binding,xamarin.forms,Xaml,Xamarin,Data Binding,Xamarin.forms,在XAML页面的页眉(定义了名称空间和x:class)中,设置该页面的bindingContext的正确语法是什么 我知道这是可以设定的 <ContentView.ContextBinding> <vm:RedViewModel/> </ContentView.ContextBinding> 但是像下面这样的东西看起来会更整洁 <?xml version="1.0" encoding="UTF-8" ?> <ContentView x:

在XAML页面的页眉(定义了名称空间和x:class)中,设置该页面的bindingContext的正确语法是什么

我知道这是可以设定的

<ContentView.ContextBinding>
<vm:RedViewModel/>
</ContentView.ContextBinding>

但是像下面这样的东西看起来会更整洁

<?xml version="1.0" encoding="UTF-8" ?>
<ContentView x:Class="MVVMFramework.VVMs.Red.RedView"
             xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:vm="clr-namespace:MVVMFramework.VVMs.Red"
             BackgroundColor="Red"
             BindingContext="{Binding Source = {vm:RedViewModel}}"> //Something like this

//像这样的
过去,第二种方法会导致创建两次
ViewModel
,如果不确定它是否存在,您可以很容易地检查它

除此之外,没有一个银弹解决方案可以适用于所有情况。如果您必须将一些数据传递给
ViewModel
constructor怎么办?对于XAML,这将是一个棘手的问题。最有可能的是,在适当的位置安装一个IOC容器,将这些属性注入到
ViewModel
,以便在代码中而不是在XAML中实现

我会说,评估你自己什么是适合你的解决方案,并坚持它,所以它将是一致的

附言:我并不是说你不应该在XAML中使用它,如果它在你的具体情况下有意义的话就使用它