私はモデルを持っています:
public class Product
{
public int Rating { get; set; }
...
}
およびビュー モデル:
public class ProductViewModel: IDataErrorProvider
{
public int Temperature { get; set; }
public Product CurrentProduct { get; set; }
public string this[string columnName]
{
get
{
if (columnName == "Rating")
{
if (CurrentProduct.Rating > Temperature)
return "Rating is too high for current temperature";
}
return null;
}
}
}
私のビューには、DataContext として ProductViewModel のインスタンスがあります。ビューには次のフィールドがあります。
<TextBox Text={Binding Path=CurrentProduct.Rating, ValidatesOnDataErrors=True} .../>
デフォルトでは、DataContext (ProductViewModel) ではなく、バインドされたオブジェクト (Product) の IDataErrorProvider で検証が行われます。したがって、上記の例では、ProductViewModel 検証は呼び出されません。これは単純な例ですが、問題を示しています。モデルは温度を認識していない (そして認識すべきではない) ため、設計では、VM がそのフィールドで検証を実行する必要があります。
はい、それをハックして、モデルのバインドされたプロパティを ViewModel に直接複製することはできますが、呼び出しをモデルではなく VM にリダイレクトする簡単な方法が必要だと思いましたか?