Пользовательский столбец WPF DataGrid - PullRequest
1 голос
/ 31 октября 2011

я пытаюсь в течение прошлой недели или около того сделать пользовательские столбцы для сетки данных 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это помощь, но не полная, потому что

  1. я не могу выполнить стилизацию или другую работу по разметке
  2. я не могу использовать команду 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" />

как вы все это делаете?спасибо миллиард!

1 Ответ

3 голосов
/ 31 октября 2011

Вы должны иметь возможность создать повторно используемую DataTemplate в ресурсах вашего приложения, а затем просто добавить DataGridTemplateColumn с указанным CellTemplate

<DataGridTemplateColumn CellTemplate="{DynamicResource CustomColumnTemplate}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...