SliverLightでオブジェクトのプロパティをコントロールにbindさせる方法

デザイン画面

[mainpage.xaml] 
<UserControl 
  xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
  x:Class="SilverlightApplication1.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" Name="Base1">
  <StackPanel x:Name="LayoutRoot">
    <TextBox Text="{Binding ElementName=Base1,Path=SingleData}"></TextBox>
    <data:DataGrid ItemsSource="{Binding ElementName=Base1,Path=ParsonList.Parson}"></data:DataGrid>
  </StackPanel>
</UserControl>

まずは、デザイン画面です。シンプルにテキストボックスとデータグリッドのみの構成となっています。データグリッドが無い等の注意を受けた人は、ツールボックスからデザイン画面にドラッグしてください。VisualStudioが自動で設定を行ってくれます。

今回はテキストボックスに、コードで設定したプロパティを。データグリッドには配列をそれぞれバインドさせ、基本を押さえておきたいと思います。

コード

[MainPage.cs] 
using System.Windows;
using System.Windows.Controls;
using System.Collections.ObjectModel; 

namespace SilverlightApplication1{
  public partial class MainPage : UserControl{
    public ParsonList ParsonList{get;set;}
    public string SingleData {get;set;}
    public MainPage(){
      SingleData = "this is SingleData";
      this.ParsonList = new ParsonList();
      this.ParsonList.Parson.Add(new Parson() { Name = "Name1", Age = 10 });
      this.ParsonList.Parson.Add(new Parson() { Name = "Name2", Age = 20 });
      this.ParsonList.Parson.Add(new Parson() { Name = "Name3", Age = 30 });
      this.ParsonList.Parson.Add(new Parson() { Name = "Name4", Age = 40 });
      this.ParsonList.Parson.Add(new Parson() { Name = "Name5", Age = 50 });
      InitializeComponent();
    }
  }
  public class ParsonList{
    public ObservableCollection<Parson> Parson{get;set;}
      public ParsonList(){
        this.Parson = new ObservableCollection<Parson>(); }
      }

  public class Parson{
    public string Name {get;set;}
    public int Age {get;set;}
  } 
}

以上のコードを実行すると、テキストボックスにはSingleDataの内容が、データグリッドにはParsonListの内容がバインドされ表示されているはずです。

SingleDataもParsonListもUserControlの持つプロパティとなります。そこで各コントロールからプロパティを参照するためには、UserControlに名前を付与してそれを目標に各コントロールはバインド式を組んでいくことになります。上記のコードの例だと、"Base1"がUserControlに付与した名前です。