2017-08-11 6 views
1

私は自分のpclにswitchコントロールを持っていて、コントロールの列挙型を持っています。列挙型の値をスイッチにバインドする方法がわかりません。スイッチがオフの場合、値は0で、スイッチがオンの場合、値は1です。これを列挙型にバインドするにはどうすればよいですか?スイッチコントロールに列挙型をバインドする方法は? Xamarin

<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="Center" Grid.Row="0" Grid.Column="1"> 
    <Label YAlign="Center" Text="M "></Label>  
    <Switch x:Name="switchM" ></Switch> 
</StackLayout> 

のEnumクラス

public enum mActive 
{ 
    NotToggled = 0, 
    Toggled = 1 
} 

答えて

2

あなたは、このための値コンバータを書くことができます。 SwitchIsToggledプロパティはboolパラメータしか受け入れないため、Enumタイプをboolに変換する必要があります。

xmlns:local="clr-namespace:MyApp.Converters;assembly=MyApp" 

:それは一番上に名前空間宣言を追加することにより、XAMLで見つけることができますが、これを使用しているページのことを確認後

public class BoolToMyEnumConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is mActive) 
     { 
      return (mActive)value == 0 ? false : true; 
     } 

     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is bool) 
     { 
      return (bool)value ? mActive.Toggled : mActive.NotToggled; 
     } 

     return mActive.NotToggled; 
    } 
} 

:ユアーズの線に沿って何かを見てしまいますあなたが指定することができますスイッチの結合で

<ContentPage.Resources> 
    <ResourceDictionary> 
     <local:BoolToMyEnumConverter x:Key="myConv" /> 
    </ResourceDictionary> 
</ContentPage.Resources> 

それはあなたがあなたのページのリソースディクショナリに追加することができます完了です
<Switch IsToggled="{Binding MyEnumInViewModel, Converter={StaticResource myConv}}" /> 

View Model内のプロパティを参照するのは、タイプが「mActive」です。これはどのように動作すべきかという大まかな草案です。 Value Convertersについてさらにお読みになることをお勧めします。

public mActive MyEnumInViewModel {get;set;} 
+0

ありがとうございました。私は今試してみる。 – batwing

関連する問題