c# - 当继承类中的变量等于某个值时如何运行方法?
问题描述
我是 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 应该运行该方法。
解决方案
一般来说,如果你想在派生类中运行某个方法,你应该在基类中定义一个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....
}
}
推荐阅读
- javascript - 在Javascript中设置显示属性无
- typescript - 打字稿 - 选项对象或生成器
- c# - 匹配 C# 8.0 开关表达式中的任何整数类型
- sql - 是否有任何简单的方法可以在 oracle sql developer 中将“值”放在单引号中以选择语句
- python - 在 scp 命令上输入密码时 Python pexpect 超时
- php - PHP 7.4 及更高版本的 WDDX 函数替换
- html - SCSS 输入复选框为选中样式
- pytorch - 使用多处理的拥抱脸 distilllbert 分类
- python - 如何在索引上应用剪切函数
- grails - 将只读数据库副本用于只读 GORM 方法和标准