首页 > 解决方案 > 当继承类中的变量等于某个值时如何运行方法?

问题描述

我是 WPF MVVM 的新手,所以我什至不知道这是否是做我想做的事情的正确方法。

我有这个基类,当我想在我的某些视图中拥有一个 UserControl (NumPad.xaml) 时,我打算使用它。

class NumPad : BaseObservableObject
{
    private string _text = "";
    public string Text
    {
        get { return _text; }
        set
        {
            if(_text.Length < 6)
                _text = value;
            else if(_text.Length == 6)
                //run some function in LogInViewModel
            OnPropertyChanged("Text");
        }
    }

    public RelayCommand NumPadCommand1 { get; set; }
    public RelayCommand NumPadCommand2 { get; set; }

    public NumPad()
    {
        NumPadCommand1 = new RelayCommand(Add1);
        NumPadCommand2 = new RelayCommand(Add2);
    }

    public void Add1(object obj)
    {
        Text += "1";
    }
    public void Add2(object obj)
    {
        Text += "2";
    }
}

数字键盘.xaml

<StackPanel>
    <Button Command="{Binding NumPadCommand1}"/>
    <Button Command="{Binding NumPadCommand2}"/>
</StackPanel>

登录视图.xaml

<StackPanel>
    <TextBox Text="{Binding Text}"/>
    <usercontrols:NumPad/>
</StackPanel>

LogInViewModel.cs

class LogInViewModel : NumPad
{
    public LogInViewModel()
    {
    }
}

我想要的是每次在 NumPad 中更改文本时检查它的长度是否等于 6 通知 LogInViewModel 这样我就可以运行一个搜索某些数据的方法,而无需输入按钮,因此每次将字符串添加到_text through Text 我想检查长度,如果它等于 6 我想在继承它的类中运行一个方法,在这种情况下 LogInViewModel 应该运行该方法。

标签: c#wpfmvvm

解决方案


一般来说,如果你想在派生类中运行某个方法,你应该在基类中定义一个virtual(或abstract)类:

class NumPad : BaseObservableObject
{
    private string _text = "";
    public string Text
    {
        get { return _text; }
        set
        {
            if (_text.Length < 6)
                _text = value;
            else if (_text.Length == 6)
                SomeMethod();
            
            OnPropertyChanged("Text");
        }
    }

    protected virtual void SomeMethod() { }

    //...
}

派生类可以(或必须取决于方法是否为abstract)然后覆盖此方法:

class LogInViewModel : NumPad
{
    protected override void SomeMethod()
    {
        //do something....
    }
}

推荐阅读