如何使用 mvvmLight 将数据从 ContentPage ViewModel 传递到 Xamarin Forms 中的 ContentView Viewmodel?
How to pass data from ContentPage ViewModel to ContentView Viewmodel in Xamarin Forms with mvvmLight?
我有一个包含一些控件和自定义导航控件 (ContentView) 的 ContentPage。 contentpage 和 navigationcontrol 都有各自的 ViewModels,它们的 BindingContext 被设置为。现在我需要将信息从页面传递到导航控件。
我尝试了什么:
<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>
页面是我的导航控件中的自定义绑定属性。 属性 有效,但 BindingContext 是错误的,它试图绑定到导航控件的 ViewModel 中的 "Page" 属性。
如果我这样改:
<controls:PageNavigationControl Grid.Row="1" Page="{Binding Page}" BindingContext="{x:Relative Name=contentpage"}/>
那么它也不起作用,因为它试图绑定到 ContentPage 本身而不是它的 ViewModel。我需要的是将它绑定到 ContentPage 的 ViewModel,它具有我要阅读的页面 属性。
是不是我的方法完全错了?我应该使用 MessagingCenter 吗?我对 Xamarin Forms 很陌生。谁能告诉我如何正确执行此操作?
对于遇到类似问题的任何人,这就是我解决它的方法。我对这个解决方案不是很满意,但它确实有效:
我在我的页面 ViewModel 中将控件 ViewModel 作为 属性 并以编程方式设置:
NavigationViewModel = App.VmLocator.PageNavigationViewModel;
在 xaml 我将自定义控件的 BindingContext 设置为 属性:
<controls:PageNavigationControl Grid.Row="1" BindingContext="{Binding NavigationViewModel}"/>
现在我可以访问我的 PageView 模型中的控件 ViewModel 并可以在那里传递我需要的数据。
我有一个包含一些控件和自定义导航控件 (ContentView) 的 ContentPage。 contentpage 和 navigationcontrol 都有各自的 ViewModels,它们的 BindingContext 被设置为。现在我需要将信息从页面传递到导航控件。
我尝试了什么:
<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>
页面是我的导航控件中的自定义绑定属性。 属性 有效,但 BindingContext 是错误的,它试图绑定到导航控件的 ViewModel 中的 "Page" 属性。
如果我这样改:
<controls:PageNavigationControl Grid.Row="1" Page="{Binding Page}" BindingContext="{x:Relative Name=contentpage"}/>
那么它也不起作用,因为它试图绑定到 ContentPage 本身而不是它的 ViewModel。我需要的是将它绑定到 ContentPage 的 ViewModel,它具有我要阅读的页面 属性。
是不是我的方法完全错了?我应该使用 MessagingCenter 吗?我对 Xamarin Forms 很陌生。谁能告诉我如何正确执行此操作?
对于遇到类似问题的任何人,这就是我解决它的方法。我对这个解决方案不是很满意,但它确实有效:
我在我的页面 ViewModel 中将控件 ViewModel 作为 属性 并以编程方式设置:
NavigationViewModel = App.VmLocator.PageNavigationViewModel;
在 xaml 我将自定义控件的 BindingContext 设置为 属性:
<controls:PageNavigationControl Grid.Row="1" BindingContext="{Binding NavigationViewModel}"/>
现在我可以访问我的 PageView 模型中的控件 ViewModel 并可以在那里传递我需要的数据。