Я определил пользовательский UserControl с DependencyProperty.Моя страница содержит UserControl, текстовое поле и ValidationSummary.Используя XAML, страница создает экземпляры Textbox и UserControl, связывая их свойства DependencyProperties со свойствами одного ViewModel.ValidationSummary работает должным образом для текстового поля «Описание запроса»:
- MessageHeader (выделен жирным шрифтом) показывает текст из свойства Name свойства DisplayAttribute связанного свойства.
Сообщение (не выделено жирным шрифтом) показывает текст исключения, вызванного связанным свойством.
<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.
Когда я проверяю свойство ошибок 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