- 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ブロック内でセットすればいいのはわかるのですが・・
|
|