我試圖讓WPF驗證在MVVM模式中工作。如何處理ViewModel中的Validation.Error而不是View的代碼?
在我看來,我可以驗證一個TextBox這樣它獲取的代碼隱藏方法「的HandleError」,它工作正常辦理:
<TextBox Width="200"
Validation.Error="HandleError">
<TextBox.Text>
<Binding Path="FirstName"
NotifyOnValidationError="True"
Mode="TwoWay">
<Binding.ValidationRules>
<validators:DataTypeLineIsValid/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
不過,我想辦理驗證我的ViewModel通過一個DelegateCommand,但是當我用下面的代碼嘗試它時,我得到了顯式錯誤「'{Binding HandleErrorCommand}'不是一個有效的事件處理程序方法名,只有生成的或代碼隱藏類的實例方法纔有效。「
是否有任何解決方法,以便我們可以處理MVVM模式中的驗證?
查看:
<TextBox Width="200"
Validation.Error="{Binding HandleErrorCommand}">
<TextBox.Text>
<Binding Path="FirstName"
NotifyOnValidationError="True"
Mode="TwoWay">
<Binding.ValidationRules>
<validators:DataTypeLineIsValid/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
視圖模型:
#region DelegateCommand: HandleError
private DelegateCommand handleErrorCommand;
public ICommand HandleErrorCommand
{
get
{
if (handleErrorCommand == null)
{
handleErrorCommand = new DelegateCommand(HandleError, CanHandleError);
}
return handleErrorCommand;
}
}
private void HandleError()
{
MessageBox.Show("in view model");
}
private bool CanHandleError()
{
return true;
}
#endregion
很高興知道,這是我要帶,因爲在WPF驗證目前似乎並沒有那樣直接或功能全,因爲我認爲這將是方向。 – 2009-05-29 07:54:00