오류를 반환하는 유효성 검사 규칙을 얻으려고합니다. IDataErrorInfo를 구현 한 모델에 내 비즈니스 개체 속성과 이벤트 유효성 검사 실패시 반환 할 메시지가 포함되어 있습니다. 또한 유효성 검사 규칙을 만들었습니다. 문제는 유효성 검사 규칙이 실행 중 (책갈피가 지정됨)이지만 IDataErrorInfo 구현에서 내 모델을 생성하더라도 규칙의 IDataErrorInfo 참조에 오류가 발생하지 않는다는 것입니다. DataGrid는 유효성 검사에 실패했음을 분명히 보여줍니다.유효성 검사 규칙에 문제가 있습니다.
규칙과 모델이 두 가지 다른 메시지를 반환하도록 테스트 한 결과 모델의 버전이 항상 반환됩니다. 그것은 내 규칙이 IDataErrorInfo 객체에 무엇이 있는지를 볼 수 없거나 단지 그것의 새로운 인스턴스를 만드는 것과 같습니다.
데이터 그리드 :
<DataGrid ItemsSource="{Binding Path=ProjectExpenseItemsCollection}" AutoGenerateColumns="False"
Name="dgProjectExpenseItems" RowStyle="{StaticResource RowStyle}"
SelectedItem="{Binding Path=SelectedProjectExpenseItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CanUserDeleteRows="True" CanUserAddRows="True">
<DataGrid.RowValidationRules>
<vr:RowDataInfoValidationRule ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>
<DataGrid.Columns>
<DataGridTextColumn Header="Item Number"
Binding="{Binding ItemNumber, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
</DataGrid.Columns>
</DataGrid>
검증 규칙 :
목적 "이데이는"null이 아니라, idei.Error는 항상 길이가 0 인 문자열 ("")
입니다public class RowDataInfoValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
BindingGroup bindingGroup = (BindingGroup)value;
IDataErrorInfo idei = bindingGroup.Items[0] as IDataErrorInfo;
string error = (idei != null) ? idei.Error : null;
return (string.IsNullOrEmpty(error)) ? ValidationResult.ValidResult : new ValidationResult(false, error + ": ValidationRule");
}
}
모델/비즈니스 오브젝트 :
public class ProjectExpenseItemsBO : IDataErrorInfo, IEditableObject, INotifyPropertyChanged
{
public string ItemNumber { get; set; }
public ProjectExpenseItemsBO() {}
// string method
static bool IsStringMissing(string value)
{
return String.IsNullOrEmpty(value) || value.Trim() == String.Empty;
}
#region IDataErrorInfo Members
public string Error
{
get { return this[string.Empty]; }
}
public string this[string propertyName]
{
get
{
string result = string.Empty;
if (propertyName == "ItemNumber")
{
if (IsStringMissing(this.ItemNumber))
{
result = "Item number cannot be empty-IDataError!";
}
}
return result;
}
}
#endregion
}
그것은 총체적인 감각을 만든다. 그리고 나는 그것을 보지 않고 조금 어리 석다 고 느낀다. (newbee). 오류를 전달하는 데 필요한 코드를 추가했는데 작동 중입니다! 두 번째 대답은 내 VR이 오류에 액세스 할 수 있지만 dg는 여전히 메시지 및 유효성 검사 결과에 대한 모델의 IDEI를 찾고 있습니까? 이 경우 IDEI를 재정의하는 규칙을 어떻게 얻을 수 있습니까? 오류가 수정되었을 때 VR에서 유효성 검사 오류를 지우려면 VR을 가져 오려고하지만 dg를 정렬하거나 새로 고치면 수행 할 수 있습니다. VR이 결과를 ValidResult로 설정하면 오류를 해결할 수 있다고 생각했습니다. 안녕, 고마워! – steveareeno
무엇인가를 수정합시다. 필자는 실제로 테스트 목적이었던 IDEI의 오류를 무시하고 싶지는 않습니다. 사용자가 오류를 수정했을 때 그리드의 유효성 검사 오류를 명확히하고 싶습니다. 또는 dg를 새로 고칩니다. – steveareeno
좋아, 이제 알았다. 내 dg의 열에 ValidatesOnDataErrors가 true로 설정되어 있기 때문에 VR의 결과를 무시합니다. 난 칼럼에서 그것을 제거하고 모든 지금은 잘 작동합니다. 나는 그것들을 서로 결합하여 사용할 수있을 것이라고 생각했지만, 그것은 어느 것이 든/또는 하나 인 것처럼 보입니다. 이는 수정되었을 때 dg에서 오류를 지우는 것에 관한 것이 었습니다. 이 경우, VR이 할 수 있고 IDEI는 적어도 dg를 새로 고치지 않고는 불가능합니다. – steveareeno