2013年09月03日

WPFサンプル:ObjectDataProviderを使いメソッドをバインドする (2)

   このエントリーをはてなブックマークに追加 Clip to Evernote
ObjectDataProviderを使いメソッドをバインドする (1)では引数のないメソッドをバインドしました。今回は、引数ありのメソッドをバインドしてみます。
作成したメソッドを示します。

public class ToUpperConverter {
    public string ToUpper(string s) {
        return s.ToUpper();
    }
}

String.ToUpperメソッドをラップしただけの単純なメソッドです。
このメソッドに、TextBoxに入力された文字列を引数として渡し、大文字化された文字列をTextBlockに表示してみます。

<Window x:Class="MethodBindingSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:system="clr-namespace:System;assembly=mscorlib"
         xmlns:local="clr-namespace:MethodBindingSample"
        Title="MainWindow" Height="150" Width="325">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type local:ToUpperConverter}"
                      MethodName="ToUpper" x:Key="toUpper">
            <ObjectDataProvider.MethodParameters>
                <x:Static Member="system:String.Empty" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <StackPanel>
        <TextBox Height="24" Name="textBox1" >
            <TextBox.Text>
                <Binding Source="{StaticResource toUpper}"
                     Path="MethodParameters[0]"
                     Mode="OneWayToSource"
                     BindsDirectlyToSource="true"
                     UpdateSourceTrigger="PropertyChanged" />
            </TextBox.Text>
        </TextBox>
        <TextBlock Height="28" Name="textBlock1" Margin="5"
                   Text="{Binding Source={StaticResource toUpper}}" />
    </StackPanel>
</Window>

ObjectDataProviderでは、MethodParameters プロパティで、String型の引数があることを指定します。
そして、TextBoxの入力値(Textプロパティの値)をメソッドに渡しているのが、TeXtBox.Textプロパティのバインドの指定です。
Sourceには、ObjectDataProvider を、Pathで、0番目の引数であることを指定しています。
UpdateSourceTriggerでは、PropertyChangedとすることで、キーボードから文字が入力されるたびに、メソッドが呼び出されるようにしています。
TextBlockでは、

Text="{Binding Source={StaticResource toUpper}}"

と記述することで、toUpperと名付けられたObjectDataProviderをバインドし、そのメソッドの戻り値をTextプロパティにバインドしています。
C#のコードビハインドには何もコードは追加していません。

実行時のスクリーンショットです。

MethodBinding2

WPFサンプル・目次


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52333750