2012-02-23 4 views
0

私はEF4で作成されたデータレイヤーを持つWPFアプリケーションを持っています。 画面の1つでは、複数のエレメンツ(エンティティ名:プロジェクト)を含むコンテナ(エンティティ名:マスタ)を表示します。[プロパティ]での検証EF4のメソッドの変更

マスタは(ユーザにより設定)が開いたり閉じたりすることができる状態を有するが、そのすべてのプロジェクトが閉じていない場合に閉じることができません。

私はこれを行うには、エンティティのframewokで部分クラスを使用:

public partial class Master 
{ 
    partial void OnStatusIdChanging(int value) 
    { 
     if (value == 2) // Changing status to closed. 
     { 
      // Must check if all projects are closed. 
      if (this.Projects.Any(e => e.StatusId == 1)) 
      { 
       throw new InvalidOperationException("All the underlying projects must be closed to set the master'status to closed."); 
      } 
     } 
    } 
} 

これは、XAMLでこのようにバインドされます。

<ComboBox Grid.Column="1" Margin="2" ItemsSource="{Binding MasterStatusTypes}" SelectedValuePath="Id" SelectedValue="{Binding CurrentMaster.StatusId, Mode=TwoWay}"> 
<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}"/> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

しかし、私は変化を防止するためにホ分かりませんコンボボックスで私がしたいのは、このエラーが発生したときにメッセージボックスを表示し、それが有効になるまで古い値を戻しますが、このメッセージを取得する方法や値を置き換えることができません。

ご協力いただきありがとうございます。

答えて

0

WPFは、それを使用して構築されているので、私は非常に、任意の検証のためのIDataErrorInfoインタフェースを使用することをお勧めします。

<ComboBox SelectedValue="{Binding CurrentMaster.StatusId, ValidatesOnDataErrors=True}" ... /> 
:あなたはその後、組み込みの検証を使用するには、このようなあなたのバインディングを設定することができます
関連する問題