я пытаюсь в течение прошлой недели или около того сделать пользовательские столбцы для сетки данных wpf
главное, что есть определенные типы данных, которые я отображаю в нескольких сетях данных в приложении, и я не хочупереопределять все атрибуты каждый раз
вот пример кода, который используется снова и снова
<DataGridComboBoxColumn SelectedValueBinding="{Binding PersonID}" SelectedValuePath="PersonID" DisplayMemberPath="PersonName" Header="Customer" ItemsSource="{Binding Source={StaticResource PersonSource}}" />
, поэтому я попытался создать пользовательский контроль, подобный этому
Public Class PersonColumn
Inherits DataGridComboBoxColumn
Sub New()
SelectedValuePath = "PersonID"
DisplayMemberPath = "PersonName"
Header = "Customer"
End Sub
End Class
thisэто помощь, но не полная, потому что
- я не могу выполнить стилизацию или другую работу по разметке
- я не могу использовать команду
FindResource
для получения PersonSource
как это можно улучшить?все мои поиски показывают, что xaml повторяется снова и снова, это кажется очень избыточным
, в то же время я пытаюсь создать столбец DatePicker, но не могу найти образец столбца для повторного использования , просто переопределяякаждая сетка данных снова
большое спасибо
РЕДАКТИРОВАТЬ
я сейчас пробую совершенно другое направление
я сделал пользовательский контроль сследующая разметка
<DataGridTemplateColumn Header="Date" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my="clr-namespace:SampleWpf" x:Class="DateColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DateColumn}}, Path=Value}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DateColumn}}, Path=Value}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
и немного кода позади
Public Class DateColumn
Inherits DataGridTemplateColumn
Public Shared ReadOnly ValueProperty = DependencyProperty.Register("Value", GetType(Date?), GetType(DateColumn))
Property Value As Date?
End Class
, но это не работает.дата не отображается в столбце, и мои изменения не сохраняются обратно в источник данных
таблица данных xaml очень проста
<my:DateColumn Value="{Binding Path=ReceivedOn}" Header="ReceivedOn" />
как вы все это делаете?спасибо миллиард!