2017-06-30 12 views
0

スイッチラベルと呼ばれるカスタムコントロールを作成したいとします。スタックレイアウトの中にラベルとスイッチを入れます。私の目的はSwitchCellのようなコントロールを作ることです。StackLayoutでBindableプロパティが機能しない

[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); 
     } 
    } 
} 

背後

<?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> 

コードは、私は正しい方法でそれを書くのですか? モデルをバインドするときにバインディングが実行されないことが判明しました

答えて

0

バインド可能なプロパティがどのように正しく動作するかはわかりません。 それが私に起こるとき、私はonpropertyChangedハンドラをBindableProperty.Create()にパラメータとして追加します。ビューのコントロールに変更を反映させます。

とにかく、私はあなたがすでにバインド可能なものであるため、バインド可能なプロパティを追加する必要はないと思います。 viewmodelのbooleanプロパティにバインドするだけで動作します。

関連する問題