Silverlight ValidationSummary опускает MessageHeader для свойства, связанного с UserControl - PullRequest
1 голос
/ 03 ноября 2011

Я определил пользовательский UserControl с DependencyProperty.Моя страница содержит UserControl, текстовое поле и ValidationSummary.Используя XAML, страница создает экземпляры Textbox и UserControl, связывая их свойства DependencyProperties со свойствами одного ViewModel.ValidationSummary работает должным образом для текстового поля «Описание запроса»:

  1. MessageHeader (выделен жирным шрифтом) показывает текст из свойства Name свойства DisplayAttribute связанного свойства.
  2. Сообщение (не выделено жирным шрифтом) показывает текст исключения, вызванного связанным свойством.

    <Display(Name:="Request Description")> _
    Public Property RequestDescription() As String
      Get
          …
      End Get
      Set(ByVal value As String)
          …
          If value.ToLower.Contains("zombie") Then
              Throw New Exception("We're not saying the zed word.")
          End If
          …
      End Set
    End Property
    

Однако, ValidationSummary для UserControl "Fleet Unit"отсутствует MessageHeader.

val sum

Когда я проверяю свойство ошибок ValidationSummary, я обнаружил, что ошибка для UserControl имеет:

  • MessageHeader = Nothing
  • Sources.Count = 1
  • Sources (0) .Control = MyUserControl
  • Sources (0) .PropertyName = Nothing

Напротив,ошибка для Textbox имеет и MessageHeader, и Sources (0) .PropertyName, соответствующее свойству DisplayAttribute Name.

Я поместил DisplayAttribute с Name в свойстве ViewModel, к которому привязан UserControl.Я попытался разместить DisplaceAttributes в DependencyProperty UserControl, а также в свойстве, названном в регистрации DependencyProperty.Ничто из этого не передается ValidationSummaryItemSource.PropertyName из ValidationSummary.

Может ли кто-нибудь предложить совет, чтобы ValidationSummary отображал MessageHeader для свойства, связанного с UserControl?

Подробнее (11/2 /2011 5:15 вечера по восточному времени):
Нажатие на одну из ошибок, перечисленных в ValidationSummary, приводит к тому, что связанный элемент управления будет сфокусирован.При щелчке по текстовому полю Сообщение отображается справа от текстового поля, а также в ValidationSummary.(Не показано.) При щелчке по UserControl сообщение появляется только в ValidationSummary.

Дополнительная информация (09.11.2011, 10:14 ET):
kmacmahon: Надеюсь, это то, что вам нужно.Спасибо за вашу помощь!

Function ValidateEntry(ByVal fieldname As String, ByRef value As Object) _
  As Object
    Dim ctx As New ValidationContext(Me, Nothing, Nothing)
    ctx.MemberName = fieldname
    Validator.ValidateProperty(value, ctx)
    Return value
End Function

.

<Display(Name:="Fleet Unit ID")> _
<Required(ErrorMessage:="Fleet Unit is required, but not supplied.")> _
Public Property FleetUnitID As Integer?
    Get
        Return _Incident.EFleetUnitID
    End Get
    Set(ByVal value As Integer?)
        Const propname As String = "FleetUnitID"
        If Not Equals(_Incident.EFleetUnitID, value) Then
            If value Is Nothing Then
                _Incident.EFleetUnitID = Nothing
            Else
                _Incident.EFleetUnitID = ValidateEntry(propname, value)
            End If
            NotifyChangeUpdate(propname)
        ElseIf value Is Nothing AndAlso FleetUnitIDRequired Then
            ValidateEntry(propname, value)
        End If
    End Set
End Property

.

<Display(Name:="Request Description")> _
<Required(ErrorMessage:="Please describe your request.")> _
<StringLength(8000)> _
Public Property RequestDescription() As String
    Get
        Return Incident.RequestDescription
    End Get
    Set(ByVal value As String)
        Const propname As String = "RequestDescription"
        If Not Equals(Incident.RequestDescription, value) Then
            Incident.RequestDescription = ValidateEntry(propname, value)
            NotifyChangeUpdate(propname)
        End If
        If RequestSpecificReference IsNot Nothing _
            AndAlso RequestSpecificReference.Template > "" Then
            If value = RequestSpecificReference.Template Then
                Throw New Exception("Please provide information" _
                      & " requested in description field.")
            End If
        End If
        If value.ToLower.Contains("zombie") Then
            Throw New Exception("We're not saying the zed word.")
        End If
        NotifyPropertyChanged("SubmitButtonVisibility")
    End Set
End Property
...