Xamarin 是否更改了属性+;=LinkLabel_属性已更改;与受保护的override void OnPropertyChanged相同(字符串propertyName=null)
在像这样的Xamarin模板中。我认为有两种方法可以检查财产是否发生了变化Xamarin 是否更改了属性+;=LinkLabel_属性已更改;与受保护的override void OnPropertyChanged相同(字符串propertyName=null),xamarin,xamarin.forms,Xamarin,Xamarin.forms,在像这样的Xamarin模板中。我认为有两种方法可以检查财产是否发生了变化 添加PropertyChanged+=LinkLabel\u PropertyChanged 覆盖,调用基 如果我想在多个属性发生更改时执行某些操作,那么这两种调用方法之间有什么区别吗 public class LinkLabel : Label { public LinkLabel() { PropertyChanged += LinkLabel_PropertyChanged;
- 添加PropertyChanged+=LinkLabel\u PropertyChanged李>
- 覆盖,调用基
public class LinkLabel : Label
{
public LinkLabel()
{
PropertyChanged += LinkLabel_PropertyChanged;
}
protected override void OnPropertyChanged(string propertyName = null)
{
base.OnPropertyChanged(propertyName);
// Check property name and do action here
}
private void LinkLabel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// Check property name and do action here
}
}
以下是我编写的代码供参考,我想知道这是否是一个好的解决方案:
public class LinkLabel : Label
{
public LinkLabel()
{
SetDynamicResource(Label.FontFamilyProperty, "Default-Regular");
SetDynamicResource(Label.FontSizeProperty, "LabelTextFontSize");
SetDynamicResource(Label.TextColorProperty, "LinkLabelColor");
VerticalOptions = LayoutOptions.CenterAndExpand;
VerticalTextAlignment = TextAlignment.Center;
}
public static readonly BindableProperty IsImportantProperty =
BindableProperty.Create(nameof(IsImportant), typeof(bool), typeof(LinkLabel), false);
public bool IsImportant
{
get { return (bool)GetValue(IsImportantProperty); }
set { SetValue(IsImportantProperty, value); }
}
protected override void OnPropertyChanged(string propertyName = null)
{
base.OnPropertyChanged(propertyName);
if (propertyName == IsEnabledProperty.PropertyName ||
propertyName == IsImportantProperty.PropertyName)
{
if (this.IsEnabled) {
if (this.IsImportant)
this.SetDynamicResource(Label.TextColorProperty, "LinkLabelImportantColor");
else
this.SetDynamicResource(Label.TextColorProperty, "LinkLabelColor");
}
else
this.SetDynamicResource(Label.TextColorProperty, "LinkLabelDisabledColor");
}
}
}
是的,区别在于注册
PropertyChanged
事件从外部起作用,重写受保护(!)OnPropertyChanged
方法仅从标签的派生类内起作用
因此,如果要更改标签的行为,通常只会创建一个新的派生的LinkLabel
类。在这里,您将重写OnPropertyChanged(如果需要)
如果您想了解主窗体中的更改,您可以直接在那里注册事件。无需创建派生类。因此,在本例中,在我创建新类型标签的情况下,我说重写是一种可以接受的方法,对吗?请注意,我现在在问题中添加了我创建的代码,以使问题更加清楚。谢谢,我认为覆盖是正确的方法。我不是Xamarin的专家,但这在我看来是合理的。在这种情况下,显然比使用事件更直接。