2つのxamlコード行があります。子へのバインド時にIDataErrorInfoが機能しない
<TextBox Text="{Binding Path=MyEntity.Name, ValidatesOnDataErrors=True}" />
と
<ComboBox ItemsSource="{Binding EntityCollection}"
SelectedItem="{Binding Path=MyEntity.ChildEntity.NestedChildEntity}"
SelectedValue="{Binding Path=MyEntity.ChildEntity.ChildProperty, ValidatesOnDataErrors=True}"
SelectedValuePath="PK"/>
すべての私のエンティティの基本クラス、IDataErrorInfoおよび彼のインデクサによって、実装されています。
MyEntity、ChildEntityとNestedChildEntityデータベース・エンティティです。 MyEntityのナビゲーションプロパティはChildEntityです。 ChildEntityのナビゲーションプロパティはNestedChildEntityです。 ChildPropertyはChildEntityで必要です。 ChildPropertyは外部キーで、NestedChildEntityはエンティティです。コンボボックスで値を選択しないと、ChildPropertyはnullになります。通常はnullにはできません。
EntityCollectionはタイプの一覧< NestedChildEntity>
MyEntity.cs
public class MyEntity : BaseEntityClass
{
[Key]
[Required]
public long PK { get; set; }
public string Name { get; set; }
public ChildEntity ChildEntity { get; set; }
}
ChildEntity.cs
public class ChildEntity : BaseEntityClass
{
[Key]
[Required]
public long PK { get; set; }
[Required]
public long ChildProperty { get; set; }
[ForeignKey("ChildProperty")]
public NestedChildEntity NestedChildEntity { get; set; }
}
NestedChildEntity.csある
public class NestedChildEntity : BaseEntityClass
{
[Key]
[Required]
public long PK { get; set; }
}
BaseEntityClass.cs最初の行のために
public class BaseEntityClass : IDataErrorInfo
{
public string Error
{
get
{
return null;
}
}
public string this[string propertyName]
{
get
{
//Check the Required and StringLength attribute
var annotationValidationError = GetAnnotationValidationError(propertyName);
if (annotationValidationError == null)
{
return GetValidationError(propertyName);
}
else
{
return annotationValidationError;
}
}
}
}
、検証作品、私の基本クラスのインデクサは達し、プロパティ名は、パラメータ(この場合は、「名前」)として送信されている
2番目の行では、検証は行われません。 ChildEntityクラスが(基本クラスを介して)IDataErrorInfoを実装しています。
なぜこのようなネストされたバインディングの動作ですか?回避策を教えてください。
私はよく理解するために私の質問を更新しました。私はSelectedValuePathも使うので、SelectedValueを使用します。私はあなたが示唆するようにSelectedItemにValidatesOnDataErrorsを入れようとしましたが、何もしませんでした –
なぜSelectedItemを使用していますか?あなたの物件のタイプは何ですか? – mm8
正直言って、私は少し冗長だが、それはレガシーコードだと分かっています。コーダーは、これらのプロパティのうちの1つだけが設定されている場合、EntityFrameworkが不平を言っていないことを確認するためにこれを行いました。 EntityCollection = List。彼らは** ChildProperty **を除くすべてのPOCOです**長い** –