Установите BindingContext в ViewModel в XAML на Xamarin.Forms

Я хочу разработать простой проект с Xamarin.Form и MVVM. В моем решении (называемом XamarinPOC) у меня есть (в дополнение к стандартным проектам Xamarin.Forms) один отдельный проект для модели (XamarinPOC.Model) и один отдельный проект для ViewModel (XamarinPOC.ViewModel).

Я определил в проекте XamarinPOC.ViewModel абстрактный класс для класса BaseViewModel (который реализует интерфейс INotifyPropertyChanged) и после того, как я создал класс SummaryViewModel, который расширяет класс BaseViewModel с помощью простого свойства:

namespace XamarinPOC.ViewModel
{
    public class SummaryViewModel : BaseViewModel
    {

        private string _test = "The binding is OK!";
        public String test
        {
            get
            {
                return _test;
            }
            set
            {
                _test = value;
                OnPropertyChanged("test");
            }
        }
        public SummaryViewModel(){}
    }
}

Затем я создал простой ContentPage (SummatyView) в проекте XamarinPOC, который содержит только ярлык, который я хочу показать текст, определенный в ViewModel. Я хочу использовать XAML для определения представления и привязки, но когда я запускаю приложение, ничего не отображается, у меня нет ошибок во время компиляции и времени выполнения, но текст не отображается. Мой XAML - это

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamarinPOC.ViewModel,assembly=XamarinPOC.ViewModel"
             x:Class="XamarinPOC.Summary"
             Title="Summary List"
             BindingContext="XamarinPOC.ViewModel.SummaryViewModel">
  <StackLayout>
    <Label Text="{Binding test}"/>
  </StackLayout>
</ContentPage>

и, наконец, мое приложение:

 namespace XamarinPOC
{
     public class App : Application
     {
         public App()
         {
             MainPage = new Summary();
         }
     }
 }

В проекте XamarinPOC я добавил ссылку на сборки XamarinPOC.ViewModel и XamarinPOC.Model.

Я думаю, что проблема заключается в определении привязки XAML, но я не нашел ошибку. Где я ошибаюсь?

Ответ 1

Чтобы привязать представление к viewmodel из Xaml в вашем случае, сделайте это так:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; assembly=XamarinPOC.ViewModel"
             x:Class="XamarinPOC.Summary"
             Title="Summary List">
  <ContentPage.BindingContext>
    <viewModels:SummaryViewModel/>
  </ContentPage.BindingContext>
  <StackLayout>
    <Label Text="{Binding test}"/>
  </StackLayout>
</ContentPage>

Одно замечание, которое я заметил, это соглашения об именах, лучше разместить все свои ViewModels, даже если это только одна модель представления, внутри папки с именем "ViewModel s". Таким образом, пространство имен в вашем case будет XamarinPOC.ViewModel s