2013年08月28日

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

   このエントリーをはてなブックマークに追加 Clip to Evernote
LIstBoxに乱数をいくつか表示するだけの単純なWPFのプログラムを考えてみます。
C#のコードで、ListBoxのItemsSourceに乱数の結果一覧を代入すれば、それで実現することができますが、今回は、XAMLのメソッドをバインドする機能を使ってみます。

まず、乱数を得るための以下のようなクラスを定義します。
これは、なんの変哲もないコードですね。

public class RandomNumbers {
    public IEnumerable<int> GetNumbers() {
        var rnd = new Random();
        for (int i = 0; i < 12; i++) {
            yield return rnd.Next(100, 1000);
        }
    }
}

このRandomNumbersのGetNumbersメソッドをバインドするXAMLが以下になります。

<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="351.108" Width="246.994">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type local:RandomNumbers}"
                            MethodName="GetNumbers" x:Key="RandomNum">
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <ListBox HorizontalAlignment="Left" Height="300" Margin="10,10,0,0"
                 VerticalAlignment="Top" Width="217"
                 ItemsSource="{Binding Mode=OneWay, Source={StaticResource RandomNum}}"/>
    </Grid>
</Window>

ObjectDataProvider要素をWindows.Resourcesに定義し、ここで、クラス名とメソッド名を指定します。x:Keyでこのリソースに名前をつけます。
ListBoxでは、ItemsSourceで、先ほど名前付けした ObjectDataProvider をバインドしています。
C#のコードビハインドには何も記述する必要はありません。
以下は、これを実行してみたスクリーンショットです。

MethodBinding1

WPFサンプル・目次


この記事へのコメント
クラスメイトウケた
Posted by とおりすがり at 2014年07月04日 23:48
ほんとだ(笑) 直しておきましたー。
Posted by Gushwell at 2014年07月05日 07:24
 

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

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