【发布时间】:2013-04-04 15:15:17
【问题描述】:
我有一个像这样实现 IDataErrorInfo(并派生自 Caliburn Micro 的 Screen 类)的视图模型
public class MyViewModel : Screen, IDataErrorInfo
{
...
public BindableCollection<MyEntity> Entities { get; set; }
public MyEntity SelectedEntity
{
get { return _entity; }
set
{
_entity = value;
OnSelectedEntityChanged();
}
}
private void OnSelectedEntityChanged()
{
// implementation
}
public virtual string Error
{
get { // implementation }
}
public virtual string this[string columnName]
{
get { // implementation }
}
public void Populating(PopulatingEventArgs e)
{
// implementation
}
}
使用 Caliburn Micro 绑定到以下 XAML(仅显示相关部分)
<tk:AutoCompleteBox
x:Name="Entities"
cal:Message.Attach="[Event Populating] = [Populating($eventArgs)]"
SelectedItem="{Binding Path=SelectedEntity, Mode=TwoWay}"
HorizontalAlignment="Stretch"
FilterMode="None"
IsTextCompletionEnabled="True"
Text="{Binding SearchText}"
ValueMemberPath="Name">
<tk:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</tk:AutoCompleteBox.ItemTemplate>
</tk:AutoCompleteBox>
我遇到的问题是,当我以编程方式更新 SelectedEntity 属性时,它不会导致触发验证。我已经尝试了许多不同的可能解决方案,例如尝试获取绑定表达式并在其上调用 ValidateWithoutUpdate()、在 XAML 中添加应该导致触发验证的触发器等,但到目前为止都没有奏效。
如何触发最终会调用 IDataErrorInfo.Error 的验证?
谢谢!
【问题讨论】:
标签: wpf validation xaml caliburn.micro