我得到了一个使用 IDataErrorInfo 接口处理验证的 ViewModel。这适用于组合框、文本框、复选框等。
DatePicker 似乎根据绑定到“日期时间?”来验证输入本身。ViewModel 中的属性也可以正常工作。
现在我想使用 ViewModel 内部的命令绑定禁用/启用按钮。如果任何控件显示验证错误,则应禁用该按钮。
使用 MVVM-Light 的 RelayCommand 我得到这个工作除了 DatePickers 之外的任何东西,因为他们验证自己。
中继命令代码:
this.DoSomethingCommand = new RelayCommand(this.DoSomething, this.CanDoSomething);
有没有办法让他们的验证状态进入 ViewModel?
我真的很感谢这方面的一些帮助!
在任何人提到它之前:我已经尝试使用 Multidatatrigger 并因此在视图中处理按钮 IsEnabled 属性。它没有用,IsEnabled 是我无法使用数据触发器更改的唯一属性。即使没有任何 CommandBindings。(可能是因为我的公司 Authentication-Framework)
这是我尝试的 DataTrigger 代码:
<Button x:Uid="Button_1"
Content="DoSomething"
IsDefault="True"
Command="{Binding DoSomethingCommand}">
<Button.Style>
<Style x:Uid="Style_1"
TargetType="{x:Type Button}"
BasedOn="{StaticResource {x:Type Button}}">
<Setter x:Uid="Setter_2"
Property="IsEnabled"
Value="false" />
<Style.Triggers>
<MultiDataTrigger x:Uid="MultiDataTrigger_1">
<MultiDataTrigger.Conditions>
<Condition x:Uid="Condition_1"
Binding="{Binding (Validation.HasError), ElementName=ComboBox1}"
Value="false" />
<Condition x:Uid="Condition_2"
Binding="{Binding (Validation.HasError), ElementName=ComboBox2"
Value="false" />
<Condition x:Uid="Condition_3"
Binding="{Binding (Validation.HasError), ElementName=ComboBox3}"
Value="false" />
<Condition x:Uid="Condition_4"
Binding="{Binding (Validation.HasError), ElementName=ComboBox4}"
Value="false" />
<Condition x:Uid="Condition_5"
Binding="{Binding (Validation.HasError), ElementName=ComboBox5}"
Value="false" />
<Condition x:Uid="Condition_6"
Binding="{Binding (Validation.HasError), ElementName=DatePicker1}"
Value="false" />
<Condition x:Uid="Condition_7"
Binding="{Binding (Validation.HasError), ElementName=DatePicker2}"
Value="false" />
</MultiDataTrigger.Conditions>
<Setter x:Uid="Setter_1"
Property="IsEnabled"
Value="True" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>