Wpf 从基类调用派生类(从接口)中的函数

Wpf 从基类调用派生类(从接口)中的函数,wpf,class,asynchronous,system.reactive,base-class,Wpf,Class,Asynchronous,System.reactive,Base Class,编辑:编辑以更好地聚焦问题 如何从基类中的派生类调用方法。我有几个从基类继承的类。所有派生类都实现了IValidation,因此有一个ValidateInput方法的实现 interface IValidation { public void ValidateInput(string userInput); } Public BaseClass : ViewModelBase public string UserInput { get { return _UserInput;

编辑:编辑以更好地聚焦问题

如何从基类中的派生类调用方法。我有几个从基类继承的类。所有派生类都实现了IValidation,因此有一个ValidateInput方法的实现

interface IValidation
{
    public void ValidateInput(string userInput);
}

Public BaseClass : ViewModelBase
public string UserInput
{
    get { return _UserInput; }
    set
    {
        if (value == _UserInput) return;
        _UserInput = value;
        RaisePropertyChanged(() => UserInput);

        //I want to call my validation method here
        //ValidateInput(UserInput);

        UserInputStream.OnNext(value); //UserInputStream is defined as readonly Subject<string> MyPropertyStream = new Subject<string>();
     }
}

public class DerivedCLassOne : BaseClass, IValidation
{
  public DoStuff
  {
       //subject Stream for UserInput
       UserInputStream
          .Throttle(TimeSpan.FromSeconds(1))
          .ObserveOn(Application.Current.MainWindow)
          .Subscribe(GetResults);
  }

  public async void GetResults(string userInput)
  {
      //do stuff
  }

  public void ValidateInput(string userInput)
  {
       //Do validation stuff
  }
}
由于基类派生了5或6个不同的类,因此我可以在基类DerivedClassOne.ValidateInput中使用ValidateInput方法的完整定义路径,因为根据发生的情况,派生类会有所不同。因此基类需要知道在当前使用的派生类中只使用ValidateInput方法,比如UserInputStream.OnNextvalue;打电话就可以了


这可以通过RX无功扩展来实现吗?它是否有助于在基类上实现验证?

您可以公开一个表示用户输入有效性的流:

class BaseClass 
{
    IObservable<bool> IsUserInputValid 
    { 
       get 
          { 
            return UserInputStream
                .Throttle(TimeSpan.FromSeconds(1))
                .Select(x => IsValid(x))
                .ObserveOn(Application.Current.MainWindow);
           }
     }

     private bool IsValid(string userInput) { return whether the input is valid }
 }
然后将提交按钮和验证消息绑定到IsUserInputValid属性

我建议您看看这个伟大的框架