У меня возникли проблемы с получением привязок, определенных в ControlTemplate, для работы с моей моделью.Xamarin Forms - привязка к контрольной таблице
Обратите внимание, что в приведенном ниже ControlTemplate я использую TemplateBinding для привязки к свойству Count (оливковая метка). Я использую Parent.Count как prescribed by this article, но ни значения Parent.Count, ни Количество работают.
Следующая страница использует ControlTemplate. Просто чтобы доказать, что мои работы ViewModel у меня есть серый ярлык, связанный с свойством Count.
Обратите внимание на экран настроек. Серая метка показывает свойство Count. Оливковая метка из ControlTemplate ничего не показывает.
Как я могу сделать надпись в 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>
Должно ли оно быть <Ярлык Text = "{TemplateBinding Count}" BackgroundColor = "Olive" />? – Tony
Я уже пробовал это, но он тоже не работает. –
Также проверьте наличие обновлений для пакетов NuGets и самого Xamarin? Я переустановил свой компьютер, сейчас у него нет Xamarin. Я бы хотел проверить здесь. – Tony