gpt4 book ai didi

c# - IReactiveBinding 不适用于 IDataErrorInfo

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:31 25 4
gpt4 key购买 nike

我在将 IDataErrorInfo 与 IReactiveBinding.Bind() 结合使用时遇到问题。我希望这里有人能帮助我。

我有一个继承自 ReactiveObject 并实现了 IDataErrorInfo 接口(interface)的 ViewModel。

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 属性不为空。

ViewModel 连接到 XAML 文件后面的代码中的 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 文件中指定数据绑定(bind)。

有人有解决这个问题的好方法吗?

最佳答案

The problem is now that the model validation is not called, as I don't specify the databinding in the XAML file directly.

ReactiveUI 不参与 IDataErrorInfo 和 friend 的绑定(bind)。它曾经是,但如果您仔细想想,验证本身就是表单的派生属性

ReactiveUI 已经非常擅长描述属性如何相互关联(通过 WhenAny/ToProperty),因此您应该只构造一个显示错误消息的 ValidationError 属性。

关于c# - IReactiveBinding 不适用于 IDataErrorInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27025326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com