gpt4 book ai didi

xamarin.forms - 带 Prism 的 AutoWirePartialView 不起作用或使用不当?

转载 作者:行者123 更新时间:2023-12-04 06:19:43 29 4
gpt4 key购买 nike

我正在尝试使用 prism 7.1 AutoWirePartialViewPartialView 绑定(bind)到它的 viewModel。但是,绑定(bind)不起作用,或者至少,将 viewModel 设置为 PartialView 似乎不起作用,它仍然将页面的 BindingContext 作为 BindingContext。

有我的页面 :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Project.Core.Views.NotConnectedViews.ForecastDemoPage"
xmlns:carouselForecast="clr-namespace:Project.Core.Views.MainViews"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
x:Name="ForecastDemo"
BackgroundColor="{StaticResource PrimaryColorOne}" ControlTemplate="{StaticResource MainAppTemplate}">

<ContentPage.ToolbarItems>
<ToolbarItem Name="SearchForecast" Command="{Binding ShowSearchForecastDemoCommand}" Order="Primary" Icon="ic_search_white_24dp.png" Priority="0" />
</ContentPage.ToolbarItems>

<ContentView x:Name="ContentViewForecast" ControlTemplate="{StaticResource ForecastTownControlTemplate}">
<carouselForecast:ForecastPartialViewCarousel prism:ViewModelLocator.AutowirePartialView="{x:Reference ForecastDemo}"></carouselForecast:ForecastPartialViewCarousel>
</ContentView>

</ContentPage>

Binding: 'DayWeatherForecasts' property not found on 'Project.Core.ViewModels.ForecastDemoPageViewModel', target property: 'Project.Core.Views.MainViews.ForecastPartialViewCarousel.ItemsSource'

如您所见,我将部分 View 用作使用 ControlTemplateContentViewContentPresenter

有我的 PartialView :

<carousel:CarouselViewControl x:Name="carouselView" 
Position="{Binding CarouselPosition}"
PositionSelectedCommand="{Binding PositionChanged}"
Orientation="Horizontal" AnimateTransition="True" IsSwipeEnabled="False"
ItemsSource="{Binding DayWeatherForecasts}" InterPageSpacing="10"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:carousel="clr-namespace:CarouselView.FormsPlugin.Abstractions;assembly=CarouselView.FormsPlugin.Abstractions"
x:Class="Project.Core.Views.MainViews.ForecastPartialViewCarousel">
<!-- Item template is defined here, removed for readability -->
</carousel:CarouselViewControl>

这是我的 PartialView ViewModel:

namespace Project.Core.ViewModels
{
public class ForecastPartialViewCarouselViewModel : ViewModelBase
{

public ForecastPartialViewCarouselViewModel(IForecastService forecastService,
INavigationService navigationService) : base(navigationService)
{
InitStubForecasts();
}


private ObservableCollection<DayWeatherForecast> _dayWeatherForecasts;

public ObservableCollection<DayWeatherForecast> DayWeatherForecasts
{
get => _dayWeatherForecasts;
set => SetProperty(ref _dayWeatherForecasts, value);
}
}
}

当然 DayWeatherForecasts 设置了一些 stub 值。为了便于阅读,我简化了 viewModel。

我没有使用 prism AutoWiring viewModel,所以在 app.xaml.cs 中:

containerRegistry.RegisterForNavigation<ForecastDemoPage, ForecastDemoPageViewModel>();

问题:我的 PartialViewModel 是否在 ViewModels 文件夹中,而我想绑定(bind)到此 ViewModel 的 Partialview 是否在子文件夹 MainViews 下?我应该创建一个 MainViewsViewModel 文件夹并将我的 viewModel 放在那里吗?

编辑:我试过这个解决方案,但正如我所料,它什么也没做。

如果不行,那我就不知道为什么不行了……

谢谢!

最佳答案

好吧,所以我终于发现它不够把它放到我的 PartialView

prism:ViewModelLocator.AutowirePartialView="{x:Reference ForecastDemo}

当我在子文件夹中组织我的 View 时,Prism 无法单独注册我的 ViewModel 和我的 PartialView

所以我需要的是使用 ViewModelLocationProviderViewModel 手动注册到 PartialView

protected override void RegisterTypes(IContainerRegistry containerRegistry) 
{
ViewModelLocationProvider.Register<ForecastPartialViewCarousel,
ForecastPartialViewCarouselViewModel>();
}

这不仅是名称的问题,也是命名空间的问题。如果我希望 PartialView 设置正确的 ViewModel 而无需手动注册,我应该将 PartialView 放入 Views 根文件夹和 ViewModels 根文件夹中的相应 ViewModel(具有命名约定)

关于xamarin.forms - 带 Prism 的 AutoWirePartialView 不起作用或使用不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896129/

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