我将IDataErrorInfo与IReactiveBinding.Bind()结合使用时遇到问题。我希望这里有人可以帮助我。
我有一个ViewModel,它继承自ReactiveObject并实现了IDataErrorInfo接口。
public class MainWindowViewModel : ReactiveUI.ReactiveObject, IDataErrorInfo
{
private string username = string.Empty;
public string Username
{
get { return this.username; }
set { this.RaiseAndSetIfChanged(ref this.username, value); }
}
public MainWindowViewModel()
{
this.Validator = new MainWindowViewModelValidator();
}
public AbstractValidator<MainWindowViewModel> Validator { get; set; }
#region IDataErrorInfo Members
string IDataErrorInfo.Error
{
get
{
return Validator != null ? string.Join(Environment.NewLine, Validator.Validate(this).Errors.Select(x => x.ErrorMessage).ToArray())
: string.Empty;
}
}
string IDataErrorInfo.this[string propertyName]
{
get
{
if (Validator != null)
{
var results = Validator.Validate(this, propertyName);
if (results != null
&& results.Errors.Count() > 0)
{
var errors = string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage).ToArray());
return errors;
}
}
return string.Empty;
}
}
#endregion
}
MainWindowViewValidator确保Username属性不为空。
在XAML文件后面的代码中,ViewModel连接到了View:
public partial class MainWindow : IViewFor<MainWindowViewModel>
{
public MainWindow()
{
InitializeComponent();
this.ViewModel = new MainWindowViewModel();
this.Bind(this.ViewModel, viewmodel => viewmodel.Username, view => view.Username.Text);
}
public MainWindowViewModel ViewModel
{
get { return (MainWindowViewModel)GetValue(ViewModelProperty); }
set { SetValue(ViewModelProperty, value); }
}
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register("ViewModel", typeof(MainWindowViewModel), typeof(MainWindow), new PropertyMetadata(null));
object IViewFor.ViewModel
{
get { return ViewModel; }
set { ViewModel = (MainWindowViewModel)value; }
}
}
现在的问题是,没有调用模型验证,因为我没有直接在XAML文件中指定数据绑定。
有人对此问题有一个好的解决方案吗?
现在的问题是,没有调用模型验证,因为我没有直接在XAML文件中指定数据绑定。
ReactiveUI不参与,IDataErrorInfo
并且没有朋友可以进行绑定。它曾经使用过,但实际上,如果您考虑一下,验证本身就是表单的派生属性。
ReactiveUI已经非常擅长描述属性之间的相互关系(通过WhenAny / ToProperty),因此您应该仅构造一个显示错误消息的ValidationError属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句