如果验证失败,请不要关闭窗口 - 在WPF中

时间:2011-04-01 07:39:36

标签: wpf mvvm

我是WPF和MVVM的初学者。 我有一个简单的wpf窗口,我在其中添加2个值。我正在使用命令绑定 在添加按钮。

这是我的按钮

的xaml代码
<Button Content="OK" Name="btn_OK" Command="{Binding AddShutterType}" />

这个命令写在我的视图模型中,我也在做一些验证 但我的问题是如果验证失败或成功我的窗口没有关闭! 如果我给“this.close”窗口按钮单击事件,则它总是关闭。 我的要求是在验证失败时保留窗口,如果验证成功则关闭。怎么做?

这是我的视图模型代码,其中包含验证部分。

    private ICommand _AddShutterType;

    public ICommand AddShutterType
    {
        get
        {
            if (_AddShutterType == null)
            {
                _AddShutterType = new DeligateCommand.DelegateCommand(delegate()
                {
                    ShutterNameToAdd.Trim();
                    ShutterCodeToAdd.Trim();

                    StringBuilder SB = new StringBuilder();
                    if (ShutterCodeToAdd == "")
                    {
                        SB.Remove(0, SB.Length);
                        SB.Append("Please type in a Code for the shutter.");
                        throw new ArgumentException(SB.ToString());
                    }

                    if (ShutterCodeToAdd.Length > 10)
                    {
                        SB.Remove(0, SB.Length);
                        SB.Append("Shutter type code size cannot be more than 5");
                        throw new ArgumentException(SB.ToString());
                    }

                    if (ShutterNameToAdd == "")
                    {
                        SB.Remove(0, SB.Length);
                        SB.Append("Please type in a Name for the shutter.");
                        throw new ArgumentException(SB.ToString());
                    }                      

                   Model.AddShutterType(ShutterCodeToAdd, ShutterNameToAdd);
                });
            }
            return _AddShutterType;
        }
    }

请任何人帮助我..

1 个答案:

答案 0 :(得分:0)

我的解决方案是在vm中保存视图的引用,但它将是一个接口;

例如

public View : UserControl, IView
{
    void IView.Close()
    { 
        this.Close();
    }
}

public ViewModel
{
    public IView View{get;set;}

    public void CommandImpl()
    {
        if (Validated())
            View.Close();
    }
}

希望这有帮助。