我想创建一个名为switch label的自定义控件。我把标签和开关放在堆栈布局中。我的目的是制作像SwitchCell这样的控件。
<?xml version="1.0" encoding="UTF-8"?>
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MobileRKE.Controls.SwitchLabel"
Orientation="Horizontal">
<Label x:Name="lbTitle" HorizontalOptions="FillAndExpand" Text="{Binding Title}" VerticalOptions="Center"/>
<Switch x:Name="swtValue"
IsToggled="{Binding IsOn}"
VerticalOptions="Start"/>
</StackLayout>
背后的代码
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SwitchLabel : StackLayout
{
public SwitchLabel()
{
BindingContext = this;
InitializeComponent();
}
public static readonly BindableProperty TitleProperty = BindableProperty.Create(
propertyName: nameof(Title),
returnType: typeof(string),
declaringType: typeof(SwitchLabel),
defaultValue: string.Empty,
defaultBindingMode: BindingMode.TwoWay);
public static readonly BindableProperty IsOnProperty = BindableProperty.Create(
propertyName: nameof(IsOn),
returnType: typeof(bool),
declaringType: typeof(SwitchLabel),
defaultValue: false,
defaultBindingMode: BindingMode.TwoWay);
public string Title
{
get
{
return (string)GetValue(TitleProperty);
}
set
{
SetValue(TitleProperty, value);
}
}
public bool IsOn
{
get
{
return (bool)GetValue(IsOnProperty);
}
set
{
SetValue(IsOnProperty, value);
}
}
}
我是否以正确的方式撰写? 当我将模型绑定到它时,我发现绑定没有触发
答案 0 :(得分:0)
我自己很难理解精确可绑定的属性是如何工作的。 但是当我遇到这种情况时,我将onpropertyChanged处理程序添加到BindableProperty.Create()作为参数。并在视图中反映对控件的更改。
无论如何,关于你的情况,我认为你不需要添加可绑定属性,因为IsToggled已经是一个可绑定的属性。只需绑定到viewmodel中的boolean属性,这应该可行。