gpt4 book ai didi

c# - 如何使用 mvvmLight 将数据从 ContentPage ViewModel 传递到 Xamarin Forms 中的 ContentView Viewmodel?

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:00 25 4
gpt4 key购买 nike

我有一个包含一些控件和自定义导航控件 (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>

Page 是我的 navigationControl 中的自定义 BindingProperty。该属性有效,但 BindingContext 错误,它尝试绑定(bind)到导航控件的 ViewModel 中的“Page”属性。

如果我这样改变它:

<controls:PageNavigationControl Grid.Row="1" Page="{Binding Page}" BindingContext="{x:Relative Name=contentpage"}/>

然后它也不起作用,因为它试图绑定(bind)到 ContentPage 本身而不是它的 ViewModel。我需要的是将它绑定(bind)到 ContentPage 的 ViewModel,它具有我想要读取的页面属性。

我的方法完全错误吗?我应该使用 MessagingCenter 吗?我对 Xamarin Forms 很陌生。谁能告诉我如何正确执行此操作?

最佳答案

对于遇到类似问题的任何人,这就是我解决的方法。我对这个解决方案不是很满意,但它确实有效:

我在我的页面 ViewModel 中将控件 ViewModel 作为属性并以编程方式设置它:

NavigationViewModel = App.VmLocator.PageNavigationViewModel;

在 xaml 中,我将自定义控件的 BindingContext 设置为属性:

<controls:PageNavigationControl Grid.Row="1" BindingContext="{Binding NavigationViewModel}"/>

现在我可以访问我的 PageView 模型中的控件 ViewModel 并且可以在那里传递我需要的数据。

关于c# - 如何使用 mvvmLight 将数据从 ContentPage ViewModel 传递到 Xamarin Forms 中的 ContentView Viewmodel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com