Привязка к DataGridTemplateColumn - PullRequest
       4

Привязка к DataGridTemplateColumn

1 голос
/ 01 сентября 2010

У меня есть таблица User, и у меня есть внешний ключ этой таблицы из таблицы Book. FK - это ProxyResponsibleUser_ID. когда я использую DataGridTextColumn в моей DataGrid, все в порядке, но теперь я хочу использовать DataGridTemplateColumn для отображения столбца FullName из таблицы User для соответствующего пользователя с ProxyResponsibleUser_ID. Я получаю сообщение об ошибке, поскольку DataGridTemplateColumn не имеет свойства Binding.

Итак, каким свойством DataGridTemplateColumn я буду связывать ProxyResponsibleUser_ID? Заранее спасибо.

<DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" />
<DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn"   Binding="{Binding Path=ProxyResponsibleUser_ID}" Header="Proxy Responsible User ID" Width="*" >
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate DataType="{x:Type domain:User}">
                        <TextBlock Text="{Binding FullName}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

Ответы [ 2 ]

3 голосов
/ 31 июля 2012

Я уже давно борюсь с этим вопросом, и после многих бесплодных поисков я нашел приемлемую замену.

Для всех, кто ищет это: Попробуйте создать собственную реализацию DataGridBoundColumn.Вам нужно будет переопределить только два метода: GenerateElement и GenerateEditingElement.

Пример:

protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
    Label element = new Label();
    element.SetBinding(Label.ContentProperty, Binding);

    return element;
}

Использование:

<DataGrid>
    <DataGrid.Columns>
        <DataGridCustomColumn Binding="{Binding SomeProperty}" />
        <DataGridCustomColumn Binding="{Binding OtherProperty}" />
    </DataGrid.Columns>
</DataGrid>

Хотя я изначально намеревался использовать шаблоны, ярешили создать элементы в коде позади, поскольку мои потребности довольно просты;тем не менее, я не вижу причин, по которым это не может быть адаптировано для работы с DataTemplates при правильной регистрации DependencyProperty.

1 голос
/ 01 сентября 2010

Я не вижу точно, что вы хотите сделать, но привязка должна выполняться в TextBlock точно так же, как вы уже сделали.Поэтому привязка в теге DataGridTemplateColumn-Tag не нужна .Столбцу не нужно знать идентификатор записи.

Если вы хотите, чтобы идентификатор был доступен для элемента управления TextBox (обычно не требуется, поскольку у вас есть доступ к этому свойству напрямую через DataContext)Вы можете сделать это, например, связав свойство Tag.

<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/> 

Кстати, вы объявили TextBlock в EditTemplate.Может быть, вы хотите TextBox.Или вы хотите, чтобы пользователь мог изменить идентификатор?Сделайте комментарий, если это так.

Надеюсь, это поможет.

...