DisplayName DataAnnotations не работает в WinForms 3.5 DataGridView

Хорошо, я здесь в полном недоумении. Я успешно использовал атрибут DataAnnotations DisplayName, используя привязку модели MVC, и даже с привязкой модели WPF / Silverlight, и, конечно, он работает нормально, но теперь я работаю над проектом, в котором я вынужден использовать VB.NET 3.5 WinForms.

У меня есть модель Linq2Sql, и я создал частичный класс для одного из моих классов и включил атрибут MetadataType, указывающий на класс метаданных. Я добавил атрибут DisplayName к свойству в классе метаданных. Затем я привязываю свой datagridview к IQueryable (Of mydatatype), но имя столбца в сетке - это имя свойства, а не DisplayName.

Я что-то упускаю? Есть ли что-то еще, что мне нужно сделать, чтобы datagridview использовал DisplayName?

В моем классе модели:

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

<MetadataType(GetType(vwREVIEW_ECRMetadata))> _
Partial Class vwREVIEW_ECR
    Public Sub TestMethod()

    End Sub
End Class

Public Class vwREVIEW_ECRMetadata

    Private _ECRNumber As String
    <DisplayName("ECR #")> _
    Public Property ECRNumber() As String
        Get
            Return _ECRNumber
        End Get
        Set(ByVal value As String)
            _ECRNumber = value
        End Set
    End Property

End Class

В моем классе репозитория:

Public Function GetAllECRsForLookup() As IQueryable(Of vwREVIEW_ECR)
    Return db.vwREVIEW_ECRs
End Function

В моем классе Presenter:

Public Sub GetData()
    view.FillData(model.GetFilteredECRsForLookup())
End Sub

По-моему:

Public Sub FillData(ByVal data As System.Linq.IQueryable(Of vwREVIEW_ECR)) Implements ILookupECRView.FillData
    Me.uxECRData.DataSource = data
End Sub

Любая помощь будет принята с благодарностью! Спасибо


person Shaggy13spe    schedule 07.09.2011    source источник


Ответы (1)


Итак, я нашел решение своей проблемы. Даже не думал об этом, но в ASP.NET и WPF вы получаете такое поведение из-за встроенного поведения привязки модели. WinForms также имеет привязку данных, но не только для вашего. Хотя я мог бы «привязать» свой datagridview к моему сгенерированному linq2sql объекту во время выполнения, что бы выполнило то, что мне нужно, мне нужно было сделать это во время разработки, поэтому вместо этого я изменил свой MVP, чтобы использовать ViewModels там, где это необходимо, и привяжите datagrid к этому объекту во время выполнения, чтобы имена моих столбцов выглядели так, как я хочу. ViewModel подключается к модели и может передавать ей реальные значения.

Я основал этот подход на этом блоге, хотя я не полностью реализовал то, что он сделал: http://aviadezra.blogspot.com/2009/08/mvp-mvvm-winforms-data-binding.html

person Shaggy13spe    schedule 09.09.2011