Silverlight 4 ページに DataForm があります。以下のクラスのビューにバインドします。DataForm に組み込まれたコントロールを使用して、レコードを追加、削除、編集、前後に移動できます。しかし、Filter または SortDescription のコメントを削除するとすぐに、追加 + ボタンを押すたびに、恐ろしい「項目に検証エラーがあるか、編集されていて AutoCommit が false の場合、通貨を変更できません」というエラーが表示されます。私はこれに何時間も立ち往生しており、手がかりがありません。
public class TestData {
OperationsDataContext context;
ICollectionView view;
public ICollectionView View { get { return view; } }
public IEditableCollectionView EditableView { get { return ((IEditableCollectionView)view); } }
public TestData() {
context = new OperationsDataContext();
context.Locations.Add(new Location { LocationId = 1, LocationName = "Home", CreatorUserId = 1 });
context.Locations.Add(new Location { LocationId = 2, LocationName = "Work", CreatorUserId = 1 });
context.Locations.Add(new Location { LocationId = 3, LocationName = "Office", CreatorUserId = 1 });
view = ((ICollectionViewFactory)context.Locations).CreateView();
// View.Filter = (o) => true;
// View.SortDescriptions.Add(new SortDescription("LocationName", ListSortDirection.Ascending));
}
}
DataForm ではなく、コードを使用して手動でデータを追加しようとしましたが、フィルターと並べ替えの両方が指定されている場合でも問題なく動作します。
TestData testData = new TestData();
Location item = testData.EditableView.AddNew() as Location;
testData.EditableView.CommitNew();
コードからは機能するのに、DataForm 経由では機能しないのはなぜですか? また、フィルターが指定されていない場合は DataForm が機能するのに、常に true を返す no-op フィルターが指定されている場合は失敗するのはなぜですか?