2017-02-13 4 views
2

У меня возникли проблемы с получением привязок, определенных в ControlTemplate, для работы с моей моделью.Xamarin Forms - привязка к контрольной таблице

Обратите внимание, что в приведенном ниже ControlTemplate я использую TemplateBinding для привязки к свойству Count (оливковая метка). Я использую Parent.Count как prescribed by this article, но ни значения Parent.Count, ни Количество работают.

enter image description here

Следующая страница использует ControlTemplate. Просто чтобы доказать, что мои работы ViewModel у меня есть серый ярлык, связанный с свойством Count.

enter image description here

Обратите внимание на экран настроек. Серая метка показывает свойство Count. Оливковая метка из ControlTemplate ничего не показывает.

enter image description here

Как я могу сделать надпись в ControlTemplate показать свойство Count из ViewModel?

VIEW МОДЕЛЬ

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(); 
     } 
    } 
} 

CONTROL TEMPLATE

<?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> 
+0

Должно ли оно быть <Ярлык Text = "{TemplateBinding Count}" BackgroundColor = "Olive" />? – Tony

+0

Я уже пробовал это, но он тоже не работает. –

+0

Также проверьте наличие обновлений для пакетов NuGets и самого Xamarin? Я переустановил свой компьютер, сейчас у него нет Xamarin. Я бы хотел проверить здесь. – Tony

ответ

7

На вашем ControlTemplate, пожалуйста, используйте следующий код:

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

Кажется, что BindingContext не быть автоматически применены к вашему ContentPage ребенка, может быть, может быть ошибкой в ​​Xamarin.

+0

это сработало! Как вы нашли эту информацию? – Heshan

Смежные вопросы