相关疑难解决方法(0)

如何在ViewModel中处理Validation.Error而不是我后面的View代码?

我正在尝试让WPF验证在MVVM模式下工作.

在我的视图中,我可以验证像这样的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>
Run Code Online (Sandbox Code Playgroud)

但是,我想通过DelegateCommand处理我的ViewModel中的验证,但是当我使用以下代码尝试它时,我得到显式错误" '{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>
Run Code Online (Sandbox Code Playgroud)

视图模型:

#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;
} …
Run Code Online (Sandbox Code Playgroud)

c# validation wpf mvvm

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

mvvm ×1

validation ×1

wpf ×1