我创建了一个模板来做标签:
<?xml version="1.0" encoding="utf-8"?>
<Grid Padding="20,0" xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Test;assembly=Test"
x:Class="Test.MyTemplate"
x:Name="this" >
<Label Grid.Column="1"
IsVisible="{Binding LabelVisible, Source={x:Reference this}}"
Text="Test" />
</Grid>
和
public partial class MyTemplate : Grid
{
public event EventHandler Action;
public MyTemplate()
{
InitializeComponent();
}
public static readonly BindableProperty LabelVisibleProperty =
BindableProperty.Create(
nameof(LabelVisible),
typeof(bool),
typeof(MyTemplate),
true); // << I set this to true as I think it is for the default setting
public bool LabelVisible
{
get { return (bool)GetValue(LabelVisibleProperty); }
set { SetValue(LabelVisibleProperty, value); }
}
}
如果我在页面中编写此代码,我希望此默认值为true:
<template:MyTemplate />
但是,即使将BindableProperty.Create的最后一个属性设置为true,我的标签仍然不可见(我认为这是设置默认值的地方)。
我不能正确设置默认值吗?
答案 0 :(得分:0)
我猜测UI不会收到有关LabelVisible
已更新的通知,并且不会相应地更新IsVisible
。要么实现INotifyPropertyChanged
接口,要么将propertyChanged
参数添加到您的BindableProperty.Create
调用中。
后者可以这样完成:
public static readonly BindableProperty LabelVisibleProperty =
BindableProperty.Create(
nameof(LabelVisible),
typeof(bool),
typeof(DataGridTemplate),
true, onPropertyChanged: OnLabelVisiblePropertyChanged);
并实现这样的方法:
private static void OnLabelVisiblePropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
if (bindable != null && bindable is DataGridTemplate template)
template.MyLabel.IsVisible = (bool)newValue;
}
您必须给Label
赋予一个x:Name
值,此时绑定实际上并没有做太多事情:<Label x:Name="MyLabel" Grid.Column="1" Text="Test" />