我有一个带有一些控件和自定义navigationcontrol(ContentView)的ContentPage。 contentpage和navigationcontrol都有各自的ViewModel,它们的BindingContext设置为。现在我需要将信息从页面传递给navigationControl。
我尝试了什么:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:AuditApp.Controls;assembly=App"
x:Class="App.Pages.MyPage"
x.Name="contentpage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="9*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
...other controls...
<controls:PageNavigationControl Grid.Row="1" Page="{Binding Page}"/>
</Grid>
</ContentPage>
Page是我的navigationControl中的自定义BindingProperty。该属性有效,但BindingContext错误,它尝试绑定到navigationcontrol的ViewModel中的“Page”属性。
如果我改变它:
<controls:PageNavigationControl Grid.Row="1" Page="{Binding Page}" BindingContext="{x:Relative Name=contentpage"}/>
然后它也不起作用,因为它试图绑定到ContentPage本身而不是它的ViewModel。我需要的是将它绑定到ContentPage的ViewModel,它具有我想要读取的页面属性。
我的方法完全错了吗?我应该使用MessagingCenter吗?我对Xamarin Forms很新。谁能告诉我如何正确地做到这一点?
答案 0 :(得分:0)
对于任何绊倒类似问题的人来说,这就是我解决它的方式。我对解决方案并不完全满意,但它确实有效:
我在ViewModel页面中将控件ViewModel作为属性并以编程方式设置:
NavigationViewModel = App.VmLocator.PageNavigationViewModel;
在xaml中我将自定义控件的BindingContext设置为Property:
<controls:PageNavigationControl Grid.Row="1" BindingContext="{Binding NavigationViewModel}"/>
现在我可以访问我的PageView模型中的控件ViewModel,并可以传递我需要的数据。