Я пытаюсь использовать призму 7.1 AutoWirePartialView
для привязки PartialView
к своей модели представления.Однако привязка не работает, или, по крайней мере, установка 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>
Связывание: свойство 'DayWeatherForecasts' не найдено в 'Project.Core.ViewModels.ForecastDemoPageViewModel', целевое свойство: 'Project.Core.Views.MainViews.ForecastPartialViewCarousel.ItemsSource'
Как видите, я использую частичное представление в качестве ContentPresenter
для ContentView
, в котором используется ControlTemplate
.
Есть мой 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
устанавливается с некоторыми значениями заглушки.Я упростил viewModel для удобства чтения.
Я не использую призму AutoWiring viewModel, поэтому в app.xaml.cs:
containerRegistry.RegisterForNavigation<ForecastDemoPage, ForecastDemoPageViewModel>();
Вопрос. Может ли быть, что мой PartialViewModel
находится в папке ViewModels и чтоЧастичное представление Я хочу быть привязанным к этой ViewModel, находится в подпапке MainViews
?Должен ли я создать папку MainViewsViewModel
и поместить туда свою модель представления?
РЕДАКТИРОВАТЬ: Я пробовал это решение, но, как я ожидал, оно ничего не делает.
Если нет, то я не знаю, почему это не работает ...
Спасибо!