【问题标题】:Validation.Error Attached event with caliburn microValidation.Error 带有 caliburn micro 的附加事件
【发布时间】:2014-03-12 18:24:20
【问题描述】:

下面的作品和我后面的代码中的ErrorHandler被调用。

XAML:

 <Window Validation.Error="ErrorHandler">   

  <TextBox>
    <TextBox.Text>
        <Binding Path="SomeProperty" NotifyOnValidationError="True">
            <local:MyValidationRule />
        </Binding>
     </TextBox.Text>
  </TextBox>

  </Window>

CS:

  private void ErrorHandler(object sender, ValidationErrorEventArgs e)
  {
             ............ 
  }

现在我想使用 Caliburn Micro 的 Message.Attach 将其传输到我的 ViewModel 委托方法永远不会被调用,知道为什么吗?

XAML:

 <Window cal:Message.Attach="[Event Validation.Error] = [Action OnErrorsChanged($eventArgs)]">   

  <TextBox>
    <TextBox.Text>
        <Binding Path="SomeProperty" NotifyOnValidationError="True">
            <local:MyValidationRule />
     </Binding>
     </TextBox.Text>
  </TextBox>

  </Window>

CS:(在我的 ViewModel 中)

  private void OnErrorsChanged(ValidationErrorEventArgs e)
  {
       ............ this code is never reached.
  }

编辑:这也不起作用

<i:Interaction.Triggers>
     <i:EventTrigger EventName="Validation.Error">
         <cal:ActionMessage MethodName="OnErrorsChanged" />         
     </i:EventTrigger>
 </i:Interaction.Triggers>

谢谢。

【问题讨论】:

  • 我不认为你可以这样做 Validation.Error 因为 Caliburn.Micro 可能找不到它。不确定在执行Message.Attach 时是否支持附加属性。
  • 我也不确定..
  • 你到底想做什么?为什么要处理 ErrorsChanged?
  • 是的,但验证错误是由我认为的自定义控件的内部工作引起的,它与我的 ViewModel 中的任何属性无关,我只想通知我的 ViewModel引发了 Validation.Error 事件并传递了参数,我可以想办法做到这一点,但我希望这种简单的工作方式。

标签: wpf xaml caliburn.micro


【解决方案1】:

我也遇到了同样的问题,看来我找到了答案

using attached events with caliburn micro Message.Attach

这不是您正在寻找的。但我相信,这应该会有所帮助。

编辑:

另一个额外的技巧。这是我的代码 sn-p:

<TextBox Grid.Row="2"  >
    <i:Interaction.Triggers>
        <ui:RoutedEventTrigger RoutedEvent="Validation.ValidationError">
            <cal:ActionMessage MethodName="OnTextboxError">
                <cal:Parameter Value="$source" />
                <cal:Parameter Value="$eventArgs" />
            </cal:ActionMessage>
        </ui:RoutedEventTrigger>
    </i:Interaction.Triggers>

    <TextBox.Text>
        <Binding Path="TTT" NotifyOnValidationError="True" >
            <Binding.ValidationRules>
                <ui:TextValidationRule ValidationStep="UpdatedValue" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>


public void OnTextboxError(object sender, ValidationErrorEventArgs e)
{

}

所以诀窍是:"RoutedEvent="Validation.ValidationError""

【讨论】:

  • 我实际上不再使用它了,WPF 验证很好,我会使用 Suck 这个词。但谢谢,我相信你所做的一切都会奏效,Message.Attach 的所有问题似乎都是使用 Shorted 语法发生的。
  • 我同意你的看法。这是某种谵妄。我花了几天时间来确定为什么文本框验证“几乎很好”,但是数据网格列验证不能以正确的方式工作。而且,我获得的每一个新知识都对下一个任务毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多