読者です 読者をやめる 読者になる 読者になる

Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

IVlueConverter の ConverterParameter の書き方

Xamarin Xamarin.Forms

こんにちは。エクセルソフトの田淵です。

Xamarin.Forms で IValueConverter を使う - Xamarin 日本語情報 でも書いたのですが、IValueConverter には ConverterParameter という引数があって、条件分岐とかに使うそうです。

Switch の IsToggled を ConverterParameter に渡す方法を考えていますが、、、

Xaml

<Editor Text="{Binding Message}" />
<Switch x:Name="switcher" />
<Label x:Name="letterlabel" />

コードビハインド

this.switcher.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
    {
        this.letterlabel.SetBinding(Label.TextProperty,
                                    new Binding("Message",
                                    converter: new Converters.StringCaseConverter(),
                                    converterParameter: switcher.IsToggled));
    };

なんか、、凄くいやです。。

C# で書いた場合も

var editor = new Editor { Text = "" };
editor.SetBinding(Editor.TextProperty, "Message");

switcher = new Switch {  };
switcher.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
{
    sclabel.SetBinding(Label.TextProperty,
    new Binding("Message",
        converter: new Converters.StringCaseConverter(),
        converterParameter: switcher.IsToggled));
};

sclabel = new Label { Text = "" };

こんな感じになっちゃいます。

OnPropertyChanged が別にあるのに、書き方が分からない… Label の Binding の ConverterParameter で switcher.IsToggled とか指定しても、変更のたびに通知してあげないと初期値 false から取得値が変わらないですよね。

Switch の値によって ConverterParameter を切り替えるのってどのように書くのが良いのでしょう?

以上です。