トップページ > プログラム > 2015年08月11日 > elaltOKu

書き込み順位&時間帯一覧

10 位/150 ID中時間01234567891011121314151617181920212223Total
書き込み数0000010000000010000000103



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
236
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19 [転載禁止]©2ch.net

書き込みレス一覧

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19 [転載禁止]©2ch.net
236 :デフォルトの名無しさん[sage]:2015/08/11(火) 05:01:00.57 ID:elaltOKu
DataTemplateでわからない事があるので教えてください。

https://msdn.microsoft.com/ja-jp/library/system.windows.controls.datagridtemplatecolumn%28v=vs.110%29.aspx

↑のページの一番最後にあるサンプルを例にしてやりたい事を説明します。

サンプルではDataGridにDataTemplateが1列あり、DateTimeを扱えるようにしてある。
Bindingは DataGridTemplateColumnに記述せず、リソース側のDataTemplateに記述されています。

このサンプルに2列目のDataGridTempleteColumnを追加して、扱うデータは1列目と同様にDateTimeとします。
2列目のCellTemplate, CellEditingTemplateには1列目とは異なるDataTemplateを作成して指定します。
Bindingには2列目用のプロパティを指定します。

とりあえずコレで、2列目を動作させるという事はできます。

しかし実質1列目と2列目の違いはデータを取ってくるプロパティ名が違うだけなのに、
リソース側にBindingが違うだけのDataTemplateを書くことが非常に嫌です。

リソース側にバインドを直接記述せず、DataGridTemplateColumn 側から指定することは出来ないでしょうか?
そうすれば同じデータ型を扱うプロパティがある場合でもリソース側は常に一種類だけ記述すればいいはずです。

よろしくお願いします。
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19 [転載禁止]©2ch.net
239 :236[sage]:2015/08/11(火) 14:54:00.01 ID:elaltOKu
>>238
> ContentPresenter を使えばいい。このcontentにバインド。ContentTemplate にry な
ありがとう。
調べてみます。
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19 [転載禁止]©2ch.net
240 :236[sage]:2015/08/11(火) 22:04:46.35 ID:elaltOKu
>>238
> ContentPresenter を使えばいい。このcontentにバインド。ContentTemplate にry な
とりあえず調べて実装しようとしたのですが、うまくいかないで詰まりました。

日付データDateTimeをグリッドセルとして表示するためには
上記サンプルにあったDataGridTemplateColumn を使うか
DataGridTextColumn を使用するかのいずれかだと思います。

DataGridTemplateColumnを使う場合、プロパティにContentがない、かつBindingがないのでこちらだとプレゼンターは使えないですよね?

DataGridTextColumnを使う場合は、BindingがあるがContentはない、しかしCellStyleがあるので
こちらにリソースで定義したスタイルを指定する、という形で問題ないでしょうか?

ただスタイルで指定する場合、どう指定していいかわかりません。
とりあえず↓のようにしました。

<Style x:Key="myDateCellStyle" TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
しかしこれだと不完全だというのはわかります。
DataGridCellは実際はTextBlock?それともDataGridCellの子供?であるとか、
ContentPresenterのContentに渡すべき適切なプロパティはどうするべきでしょうか?
また受け渡し側のコントロールであるDataGridTextColumnのセルはTextBlockなので
ButtonなどのようにContentプロパティを持っていないようです。
持っているのであれば受け渡し側のContentブロック内でセットすればいいのはわかるのですが・・


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。