我在获取 ControlTemplate 中定义的绑定(bind)以针对我的模型工作时遇到问题。

请注意,在下面的 ControlTemplate 中,我使用 TemplateBinding 绑定(bind)到名为 Count(橄榄标签)的属性。我使用 Parent.Count 作为 prescribed by this article ,但 Parent.Count Count 的值都不起作用。

xaml - Xamarin表单-绑定(bind)到ControlTemplate-LMLPHP

下一页使用ControlTemplate。只是为了证明我的 ViewModel 有效,我也有一个灰色 Label 绑定(bind)到 Count 属性。

xaml - Xamarin表单-绑定(bind)到ControlTemplate-LMLPHP

注意结果屏幕。灰色标签显示 Count 属性。 ControlTemplate中的橄榄色标签未显示任何内容。

xaml - Xamarin表单-绑定(bind)到ControlTemplate-LMLPHP

如何让 ControlTemplate 中的 Label 显示 ViewModel 中的 Count 属性?

查看模型

namespace SimpleApp
{
    public class MainViewModel : INotifyPropertyChanged
    {
        public MainViewModel()
        {
            _count = 10;
            Uptick = new Command(() => { Count++; });
        }

        private int _count;
        public int Count
        {
            get { return _count; }
            set
            {
                _count = value;
                OnPropertyChanged("Count");
            }
        }

        public ICommand Uptick { get; private set; }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

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:SimpleApp"
             x:Class="SimpleApp.MainPage"
             ControlTemplate="{StaticResource ParentPage}">
    <StackLayout>
        <Button Command="{Binding Uptick}" Text="Increment Count" />
        <Label Text="{Binding Count}" BackgroundColor="Gray" />
    </StackLayout>
</ContentPage>

代码隐藏

注意这里的 BindingContext 设置为 MainViewModel。我需要使用我自己的 ViewModel 而不是背后的代码。
namespace SimpleApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            BindingContext = new MainViewModel();

            InitializeComponent();
        }
    }
}

控制模板
<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="SimpleApp.App">
    <Application.Resources>

        <ResourceDictionary>
            <ControlTemplate x:Key="ParentPage">

                <StackLayout>
                    <Label Text="{TemplateBinding Parent.Count}" BackgroundColor="Olive" />
                    <ContentPresenter />
                </StackLayout>

            </ControlTemplate>
        </ResourceDictionary>

    </Application.Resources>
</Application>

最佳答案

在您的 ControlTemplate 上,请使用以下代码:

<Label Text="{TemplateBinding BindingContext.Count}" BackgroundColor="Olive" />

似乎 BindingContext 没有自动应用于您的 ContentPage 子项,也许它可能是 Xamarin 中的错误。

关于xaml - Xamarin表单-绑定(bind)到ControlTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42213732/

10-13 03:53