このセクションでは、同じアプリケーションの別バージョンを作成します。今回は WPF を使用します。
手順は次のとおりです。
ウィンドウを右クリックして[コードの表示]を選択し、プロジェクトに次のコードを追加します。
コードのコピー
|
|
---|---|
using System; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using C1.LiveLinq; using C1.LiveLinq.AdoNet; using C1.LiveLinq.LiveViews; namespace LiveLinqWPF { ///<summary> ///Window1.xaml の操作ロジック ///</summary> public partial class Window1 : Window { public Window1() { // デザイナが生成したコード InitializeComponent(); // データを取得します var ds = GetData(); // Categories および Products を使用してライブビューを作成します var liveView = from c in ds.Categories.AsLive() join p in ds.Products.AsLive() on c.CategoryID equals p.CategoryID into g select new { CategoryID = c.CategoryID, CategoryName = c.CategoryName, Products = g }; // ビューをコントロールに連結します DataBind(liveView); } } } |
このコードは、前に WinForms バージョンのアプリケーションを記述したときのコードと同じです。GetData を呼び出して DataSet に SQL データをロードし、データをアプリケーションに公開する LiveLinq ビューを作成します。最後に、DataBind メソッドを呼び出して、コントロールを LiveLinq ビューに連結します。
GetData メソッドも、WinForms バージョンのアプリケーションで使用したものと同じです。
コードのコピー
|
|
---|---|
NORTHWNDDataSet GetData() { NORTHWNDDataSet ds = new NORTHWNDDataSet(); new NORTHWNDDataSetTableAdapters.ProductsTableAdapter() .Fill(ds.Products); new NORTHWNDDataSetTableAdapters.CategoriesTableAdapter() .Fill(ds.Categories); return ds; } |
DataBind メソッドは、前に記述したものに似ていますが、同じではありません。WPF のデータ連結メカニズムは WinForms のメカニズムと多少異なり、それがここに現れています。
コードのコピー
|
|
---|---|
void DataBind(System.Collections.IEnumerable dataSource) { // ComboBox にカテゴリを表示します comboBox1.ItemsSource = dataSource; comboBox1.DisplayMemberPath = "CategoryName"; comboBox1.SelectedIndex = 0; // C1DataGrid に製品を表示します var b = new Binding("SelectedValue.Value.Products"); b.Source = comboBox1; c1DataGrid1.SetBinding(C1.WPF.C1DataGrid.C1DataGrid.ItemsSourceProperty, b); // TextBox コントロールに製品の詳細を表示します BindControl(textBox1, "ProductName"); BindControl(textBox2, "UnitPrice"); BindControl(textBox3, "QuantityPerUnit"); BindControl(textBox4, "UnitsInStock"); } void BindControl(TextBox txt, string dataMember) { var b = new Binding("SelectedGridItem.Row.DataItem." + dataMember); b.Source = c1DataGrid1; txt.SetBinding(TextBox.TextProperty, b); } |
WPF バージョンの DataBind メソッドは、最初に、ComboBox コントロールの ItemsSource プロパティにライブビューを割り当てます。また、ComboBox の DisplayMemberPath プロパティを "CategoryName" に設定します。これは、ComboBox に表示するフィールドです。
次に、SetBinding メソッドを使用して、グリッドの ItemsSource プロパティを ComboBox の選択項目に連結します。文字列 "SelectedValue.Value.Products" は、ComboBox で現在選択されている項目の "Products" フィールドを選択します。
最後に、SetBinding を使用して、各 TextBox の Text プロパティをグリッドの選択項目の対応するフィールドに連結します。今回は、"SelectedGridItem.Row.DataItem.ProductName" のような文字列を使用して、グリッドで現在選択されている製品の特定のプロパティを選択しました。
これで、WPF バージョンのアプリケーションは完成です。ここでアプリケーションを実行すると、WinForms バージョンとまったく同様に動作することを確認できます。上の ComboBox からカテゴリを選択すると、下のグリッドに対応する製品が表示され、ウィンドウの下にある TextBox には製品の詳細が表示されます。