[WPF] Chartコントロールのデータバインディングで、ドツボにハマりかけたお話

By | Date : 2016/02/27 ( Last Update : 2018/12/15 ) | 3,861 views

カテゴリ : XAML プログラミング タグ: ,

こんにちはー!ニアです。

今回はWPFのChartコントロールでデータバインディングする時に、気を付けることについてお話しします。

今回使用したChartコントロールは

の2つです。

1. 問題のコード

例えば、Logistic写像「x(n + 1) = ax(n)( 1 – x(n) )」のグラフを描画するプログラムを作成するとします。

chart1

しかし、このコードを実行すると、Sparrow Chart側ではNullReferenceExceptionが、WPF Toolkit側ではInvalidOperationExceptionがスローされます。

2. 解決方法

どちらのChartコントロールも例外がスローされたのは、X座標・Y座標として使用しているPointクラスのNとX_Nがプロパティでなく、フィールドとして定義されていたのが原因です。

LineSeriesのXPathYPath及び、IndependentValuePathDependentValuePathにはプロパティ名を指定する必要があります。

従って、PointクラスのXとX_Nをフィールドでなく、プロパティで定義します。

これで、Logistic写像を無事に表示することができます。

chart2

3. エラーが起きても、慌てずに落ち着いて!

クラスを利用する側では、メンバーの呼び出す構文がフィールドとプロパティで同じです。

かつて私は、アプリでChartコントロールを使用した時に、XY座標に指定しているメンバーがフィールドになっていたことに気付くのに苦労したことがあります。

Visual Studioでは、クラスなどのメンバーにカーソルを当てると現れるツールチップで、フィールドとプロパティを簡単に判別することができます。

chart3

フィールドの場合、メンバーの前に「(フィールド)」が付いており、プロパティの場合、getとsetの情報が付いています。

エラーが起きたら、慌てず落ち着いて対処しましょう。

WPFのクラスで外部に公開するメンバーは、基本的にフィールドではなくプロパティを使うのがよいですね。(PropertyChengedなどのイベントハンドラは例外です。)

それでは、See you nex!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : ニア(Nia)

ゲーム系の開発&運用エンジニア(目指すはフルスタック)。主にC#(Unity)/PHPを使っています。最近はDockerやKubernetes、プライベートではAndroid Wearアプリやモバイルアプリ開発(Xamarin)を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください