mvvm下 利用AdornedElementPlaceholder实现错误提示框怎么获得bool

qq14923349 2017-05-16 07:24:56
目前view层两个textbox text双向绑定viewmodel的两个属性,一个保存button

在textbox.text bingding.ValidationRules

目前验证错误这些都做了也实现了,问题我怎么通知button(保存按钮),在输入错误的时候置灰呢,因为是MVVM我只能通过TEXTBOX的两个属性变动去通知button canexecute那个地方,但是我又不能用
System.Windows.Controls.Validation.GetErrors获取控件名,这样就破坏了MVVM的设计初衷,怎么办呢
...全文
394 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
问题我怎么通知button(保存按钮),在输入错误的时候置灰呢 -》 用触发器都可以吧,
我不太想用触发器 现在我方案调整了,viewmodel声明个附加属性 然后VIEW 里的textbox 附加属性 =“{Binding Pah=Validation.HasError}” 或者 附加属性 =“{Binding Pah=HasError}” 都不起作用 附加属性的回调在页面初始化的时候触发了一下,之后输入框达到触发条件UI已经变红了 ,附加事件的回调还是没显示 ,目前我不知道那个附加属性的绑定是否正确的
exception92 2017-05-17
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
问题我怎么通知button(保存按钮),在输入错误的时候置灰呢

-》 用触发器都可以吧,

这种效果?
exception92 2017-05-17
  • 打赏
  • 举报
回复
问题我怎么通知button(保存按钮),在输入错误的时候置灰呢 -》 用触发器都可以吧,
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
I am currently implementing a ValidationRule to check if some invalid character are in a TextBox. I am happy that setting the class I have implemented that inherits ValidationRule on my TextBox sets it in red when such characters are found, but I would also like to use the Validation.HasError property or the Validation.Errors property to pop a messagebox telling the user that there are errors in the various textboxes in the page. Is there a way to bind a property in my ViewModel to the Validation.HasError and/or to the Validation.Errors properties in order for me to have access to them in my ViewModel? Here is my error style for the TextBox: <Style x:Key="ErrorValidationTextBox" TargetType="{x:Type pres:OneTextBox}"> <Setter Property="Validation.ErrorTemplate"> <Setter.Value> <ControlTemplate> <DockPanel LastChildFill="True"> <TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="12pt" Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> </TextBlock> <AdornedElementPlaceholder x:Name="MyAdorner"/> </DockPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> Here is how I declare my TextBox (OneTextBox encapsulates the regular WPF TextBox) in my XAML: <pres:OneTextBox Watermark="Name..." Margin="85,12,0,0" Style="{StaticResource ErrorValidationTextBox}" AcceptsReturn="False" MaxLines="1" Height="22" VerticalAlignment="Top" HorizontalAlignment="Left" Width="300" > <pres:OneTextBox.Text> <Binding Path="InterfaceSpecification.Name" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <interfaceSpecsModule:NoInvalidCharsRule/> </Binding.ValidationRules> </Binding> </pres:OneTextBox.Text> </pres:OneTextBox>
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
引用 11 楼 duanzi_peng 的回复:
[quote=引用 10 楼 qq14923349 的回复:] @duanzi_peng 意思是我的附加属性的回调 是对源进行了set操作才响应?那我懂了
当然,不set 它怎么执行“属性通知” 这个操作呢[/quote] 现在有个问题 都是基础的 我把附加属性个声明在viewmodel里 view的绑定是这样子的, local:viewmodel.附加属性 =绑定。。。 我在viewmodel怎么操作这个附加属性呢,因为viewmodel继承了其他类没继承dependencyobject,能有包装器吗 没包装器怎么像普通属性去用他,然后他的值变动我想raise给按钮的canexecute那些也不知道怎么弄了
exception92 2017-05-17
  • 打赏
  • 举报
回复
引用 10 楼 qq14923349 的回复:
@duanzi_peng 意思是我的附加属性的回调 是对源进行了set操作才响应?那我懂了
当然,不set 它怎么执行“属性通知” 这个操作呢
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
@duanzi_peng 意思是我的附加属性的回调 是对源进行了set操作才响应?那我懂了
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
[quote=引用 6 楼 qq14923349 的回复:] [quote=引用 5 楼 duanzi_peng 的回复:] [quote=引用 4 楼 qq14923349 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 问题我怎么通知button(保存按钮),在输入错误的时候置灰呢 -》 用触发器都可以吧,
我不太想用触发器 现在我方案调整了,viewmodel声明个附加属性 然后VIEW 里的textbox 附加属性 =“{Binding Pah=Validation.HasError}” 或者 附加属性 =“{Binding Pah=HasError}” 都不起作用 附加属性的回调在页面初始化的时候触发了一下,之后输入框达到触发条件UI已经变红了 ,附加事件的回调还是没显示 ,目前我不知道那个附加属性的绑定是否正确的[/quote] 其实用触发器是最简单的,不需要在ViewModel中中定义附加属性,HasError 默认应该就是个附加属性,只要textbox 校验错误,就控制按钮不可用。 {Binding Pah=Validation.HasError} -》 这个应该是Pah=(Validation.HasError)[/quote] 是的 目前又弹出 无法对 。。。类型的只读属性"HasError" 进行TwoWay或者OneWayToSource绑定 (mode=Default)的情况 如果设置mode=OneWay 回调又不响应[/quote] OneWay 的意思是 目标的改变由源来控制; -》但是这个源是“只读” 的 也就是 只有get 方法,属性改变 没有set操作,所以不会响应。 OneWayToSource 的意思是 源的改变由目标来控制; -》 因为是只读的,不能对源进行set操作。 [/quote] 那OneWay应该可以啊,HasError变化了导致目标附加属性(TextHasError)改变然后回调 思路应该是的嘛 我进入textbox的style设置HasError的trigger 是有变化的
exception92 2017-05-17
  • 打赏
  • 举报
回复
引用 6 楼 qq14923349 的回复:
[quote=引用 5 楼 duanzi_peng 的回复:] [quote=引用 4 楼 qq14923349 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 问题我怎么通知button(保存按钮),在输入错误的时候置灰呢 -》 用触发器都可以吧,
我不太想用触发器 现在我方案调整了,viewmodel声明个附加属性 然后VIEW 里的textbox 附加属性 =“{Binding Pah=Validation.HasError}” 或者 附加属性 =“{Binding Pah=HasError}” 都不起作用 附加属性的回调在页面初始化的时候触发了一下,之后输入框达到触发条件UI已经变红了 ,附加事件的回调还是没显示 ,目前我不知道那个附加属性的绑定是否正确的[/quote] 其实用触发器是最简单的,不需要在ViewModel中中定义附加属性,HasError 默认应该就是个附加属性,只要textbox 校验错误,就控制按钮不可用。 {Binding Pah=Validation.HasError} -》 这个应该是Pah=(Validation.HasError)[/quote] 是的 目前又弹出 无法对 。。。类型的只读属性"HasError" 进行TwoWay或者OneWayToSource绑定 (mode=Default)的情况 如果设置mode=OneWay 回调又不响应[/quote] OneWay 的意思是 目标的改变由源来控制; -》但是这个源是“只读” 的 也就是 只有get 方法,属性改变 没有set操作,所以不会响应。 OneWayToSource 的意思是 源的改变由目标来控制; -》 因为是只读的,不能对源进行set操作。
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
@duanzi_peng 附加属性的值要是更新了 是会触发回调的吧?
qq14923349 2017-05-17
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
[quote=引用 4 楼 qq14923349 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 问题我怎么通知button(保存按钮),在输入错误的时候置灰呢 -》 用触发器都可以吧,
我不太想用触发器 现在我方案调整了,viewmodel声明个附加属性 然后VIEW 里的textbox 附加属性 =“{Binding Pah=Validation.HasError}” 或者 附加属性 =“{Binding Pah=HasError}” 都不起作用 附加属性的回调在页面初始化的时候触发了一下,之后输入框达到触发条件UI已经变红了 ,附加事件的回调还是没显示 ,目前我不知道那个附加属性的绑定是否正确的[/quote] 其实用触发器是最简单的,不需要在ViewModel中中定义附加属性,HasError 默认应该就是个附加属性,只要textbox 校验错误,就控制按钮不可用。 {Binding Pah=Validation.HasError} -》 这个应该是Pah=(Validation.HasError)[/quote] 是的 目前又弹出 无法对 。。。类型的只读属性"HasError" 进行TwoWay或者OneWayToSource绑定 (mode=Default)的情况 如果设置mode=OneWay 回调又不响应
exception92 2017-05-17
  • 打赏
  • 举报
回复
引用 4 楼 qq14923349 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:]
问题我怎么通知button(保存按钮),在输入错误的时候置灰呢

-》 用触发器都可以吧,



我不太想用触发器
现在我方案调整了,viewmodel声明个附加属性 然后VIEW 里的textbox 附加属性 =“{Binding Pah=Validation.HasError}”
或者 附加属性 =“{Binding Pah=HasError}” 都不起作用 附加属性的回调在页面初始化的时候触发了一下,之后输入框达到触发条件UI已经变红了 ,附加事件的回调还是没显示 ,目前我不知道那个附加属性的绑定是否正确的[/quote]

其实用触发器是最简单的,不需要在ViewModel中中定义附加属性,HasError 默认应该就是个附加属性,只要textbox 校验错误,就控制按钮不可用。


{Binding Pah=Validation.HasError}
-》 这个应该是Pah=(Validation.HasError)

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧