绑定和模板绑定

时间:2019-01-29 11:13:21

标签: c# xaml xamarin xamarin.forms binding

我有这个示例项目:

  • BaseView.xaml::这是一个ContentPageContentPage.ControlTemplate一起使用。它与 BaseViewModel 绑定。

  • StartPage.xaml :这是主页。这是BaseView类型,并与 StartPageViewModel 绑定。

这是BaseView的ContentPage.ControlTemplate

 <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个)都显示出来。

其中只有两个是可见的, BaseView 内部的一个具有此绑定文本的文本:

{TemplateBinding BindingContext.TestoSTART}

StartPage 内部的具有绑定文字的

{Binding TestoSTART}

如何使所有4个标签可见? 我的目标是为BindingContext提供一个BindingContext,与ContentPresenter将包含的所有possilbe页面中的所有其他...分开。

0 个答案:

没有答案