可能更好的方法是隻使用綁定組中的值,而不是模型。 這支持綁定事務提交/中止 定義結合基團爲你的窗口
<Window.BindingGroup>
<BindingGroup >
<BindingGroup.ValidationRules>
<local:YourValidationClass/>
</BindingGroup.ValidationRules>
</BindingGroup>
</Window.BindingGroup>
YourValidationClass應該處理BindingGroup的驗證,而不是一個單一的值。重要的始終使用的GetValue從的BindingGroup這裏,而不是從模式,這個模式還沒有被修改
public class YourValidationClass : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
BindingGroup bindingGroup = (BindingGroup)value;
if (bindingGroup.Items.Count == 1)
{
User user = (User)bindingGroup.Items[0];
string firstName = (string)bindingGroup.GetValue(user, "FirstName");
string lastName = (string)bindingGroup.GetValue(user, "LastName");
if (string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(lastName))
{
return new ValidationResult(false, "Both fields required");
}
}
return ValidationResult.ValidResult;
}
}
你的取消按鈕,然後應執行以下代碼:
this.BindingGroup.CancelEdit();
你保存按鈕應該至少做
this.BindingGroup.CommitEdit();
將組值綁定到模型。
你正在逆向工作,如果你點擊確定(或類似),你應該將屬性設置爲新值。 – Sayse
你可以使用jscript存儲你的表單,並且只能從jscript中單擊btncancel進行恢復。 – Veer
@Sayse用戶應該能夠編輯屬性網格中的屬性。所以當用戶點擊editBtn時,他可以編輯屬性,或者我應該創建一些彈出窗體來編輯值? – Sasha