wpf - 当输入错误时如何显示MessageBox,以及如何在WPF中使用MVVM还原TextBox的旧值

标签 wpf mvvm error-handling user-input

我一直在使用WPF及其内置的验证控件来保持安静。我在codeproject中浏览了一篇很棒的文章,其链接如下

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

我有一个客户的要求,我无法在WPF中使用MVVM满足要求。

问题如下:

有一个TextBox仅接受数字。
当用户输入数字以外的任何值时,我必须向他显示错误。错误应该

  • 突出显示文本框,提供一个工具提示
  • 在MessageBox中显示错误
  • 将TextBox还原为其以前的值

  • 例如,当加载TextBox时,其初始值可能为10
    。然后,用户输入一些错误的值,例如“aa”。

    现在,我必须显示一个“错误值”的消息框,然后将值恢复为10。

    有很多文章和方法可以通过使用ErrorTemplate等在WPF中显示错误。
    <Style TargetType="{x:Type TextBox}"> 
          <Setter Property="Validation.ErrorTemplate"> 
          <Setter.Value> 
          <ControlTemplate> 
              <DockPanel LastChildFill="True"> 
                  <TextBlock DockPanel.Dock="Right" 
                      Foreground="Orange" 
                      FontSize="12pt"> 
                      !!!!
              </TextBlock> 
               <Border BorderBrush="Green" BorderThickness="1"> 
                   <AdornedElementPlaceholder /> 
               </Border> 
              </DockPanel> 
          </ControlTemplate> 
          </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
          <Trigger Property="Validation.HasError" Value="true"> 
          <Setter Property="ToolTip" 
              Value="{Binding RelativeSource={RelativeSource Self}, 
              Path=(Validation.Errors)[0].ErrorContent}"> 
          </Setter> 
          </Trigger> 
     </Style.Triggers> 
     </Style> 
    

    但是,如何还原值并显示MessageBox。我知道可以使用代码隐藏文件中的事件来显示它,但我不想在代码隐藏文件中写入任何逻辑。我想使用MVVM 实现此功能

    样本插图将非常有帮助!

    最佳答案

    第二个问题的答案:构建一个messageboxservice,然后从您的viewmodel中调用它。您可以在所有wpf框架中找到mvvm messageboxservices。例如看肚带。

    撤消重做的事情,它是内置在wpf中的,因此strg + z可以工作。但是我还不知道如何使它与mvvm一起工作:)

    关于wpf - 当输入错误时如何显示MessageBox,以及如何在WPF中使用MVVM还原TextBox的旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852937/

    相关文章:

    c# - WinForms 中的 WPF ElementHost 不接收鼠标点击

    extjs 5如何将商店绑定(bind)到模式窗口和网格

    sql - 无法将SELECT INSERT INTO SELECT插入带有标识列的表

    c# - WPF 窗口边框与功能区控件表现得很奇怪

    c# - 如何制作switch语句wpf

    c# - 在组标题 WPF 中显示 "filled"行的数量

    android - 回调 Observable

    python - 引发错误后如何在数据框中标记损坏的数据

    c# - 引发异常会导致TargetInvocationException

    wpf - 是否可以在 WPF 中设置 BulletDecorator 的样式?