Binding и TemplateBinding - PullRequest
       11

Binding и TemplateBinding

0 голосов
/ 29 января 2019

У меня есть этот пример проекта:

  • BaseView.xaml: это ContentPage с ContentPage.ControlTemplate.Он связан с BaseViewModel .

  • StartPage.xaml : это MainPage.Это тип BaseView и связан с StartPageViewModel .

Это ContentPage.ControlTemplate BaseView

 <ContentPage.ControlTemplate>
        <ControlTemplate>
            <StackLayout>
                <Label BackgroundColor="Green" Text="{Binding BindingContext.TestoBASE}"
                    VerticalOptions="CenterAndExpand" 
                    HorizontalOptions="CenterAndExpand" />

                <Label BackgroundColor="Red" Text="{TemplateBinding BindingContext.TestoSTART}"
                    VerticalOptions="CenterAndExpand" 
                    HorizontalOptions="CenterAndExpand" />

                <ContentPresenter VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"></ContentPresenter>

            </StackLayout>
        </ControlTemplate>

    </ContentPage.ControlTemplate>

, это содержимоеStartPage:

<ContentPage.Content>
        <StackLayout>
            <Label BackgroundColor="Yellow" Text="{Binding TestoSTART}"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />

            <Label BackgroundColor="Blue" TextColor="Yellow" Text="{TemplateBinding BindingContext.TestoBASE}"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </ContentPage.Content>

Две модели ViewModel имеют только одно свойство:

  • TestoSTART для StartPageViewModel
  • TestoBASE из BaseViewModel

все это так:

public class BaseViewModel : INotifyPropertyChanged
    {
        private string _TestoBASE = "BASE";

        public string TestoBASE
        {
            get { return _TestoBASE; }
            set
            {
                _TestoBASE = value;
                OnPropertyChanged("TestoBASE");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    }

Если я попытаюсь запустить приложение, я ожидаю, что все 4 метки (2 внутри базы и2 в стартовом представлении) были показаны.

Вместо этого видны только 2 из них, тот, что внутри BaseView , в котором есть текст с этой привязкой:

{TemplateBinding BindingContext.TestoSTART}

и тот, который находится внутри StartPage с текстом с привязкой:

{Binding TestoSTART}

Как сделать видимыми все 4 метки?Моя цель состоит в том, чтобы BindingContext для BaseView был отделен от всех других BindingContext всех возможных страниц, которые будет содержать ContentPresenter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...