我在获取 ControlTemplate 中定义的绑定(bind)以针对我的模型工作时遇到问题。
请注意,在下面的 ControlTemplate 中,我使用 TemplateBinding 绑定(bind)到名为 Count(橄榄标签)的属性。我使用 Parent.Count 作为 prescribed by this article ,但 Parent.Count 和 Count 的值都不起作用。
下一页使用ControlTemplate。只是为了证明我的 ViewModel 有效,我也有一个灰色 Label 绑定(bind)到 Count 属性。
注意结果屏幕。灰色标签显示 Count 属性。 ControlTemplate中的橄榄色标签未显示任何内容。
如何让 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/