繰り返し発生する問題は、データグリッド用の拡張テキスト列を作成する必要があることです。これは、通常のテキスト列と同じように機能する列を意味しますが、テキストの横に表示される画像のような追加のグラフィックまたは機能を備えています。だから私はテンプレート列を使用していますが、これは明らかに、テキストボックス編集テンプレートなど、通常のテキスト列に期待される多くの機能を生成する際に「ゼロから始める」必要があることを意味します:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
Text="{Binding Path=[binded text], Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>
DataGridTemplateColumn から継承された列を定義し、このコードをすべてそこにダンプして、これらの列を必要なデータグリッドで再利用できるようにしたいと考えています。しかし、上に示したように、クラス定義でバインディングを宣言することはできません。これは明らかに使用法に依存するためです。
子コントロール (この場合は特にセル編集テキスト ボックス) を使用する継承されたデータグリッド列を定義するにはどうすればよいですか?ただし、列が実際のデータグリッド内で xaml で宣言されている場合でも、これらのコントロールにバインドを設定できますか?
これまでのところ、これを行うメソッドを公開しようとしましたが、機能していません:
Public Class MyTextColumn
Inherits DataGridTemplateColumn
....
Public Property EditorBinding As String
Get....
Set(value As String)
Dim b As New Binding(value)
b.Mode = BindingMode.TwoWay
b.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus
Dim tb = DirectCast(Me.CellEditingTemplate.LoadContent, TextBox)
tb.SetBinding(TextBox.TextProperty, b)
End Set
End Property
動作していません。おそらく を設定していませんBinding.Source
が、何を設定すればよいかわかりません。かなりイライラしています。