我是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";
}
}
NumPad.xaml
<StackPanel>
<Button Command="{Binding NumPadCommand1}"/>
<Button Command="{Binding NumPadCommand2}"/>
</StackPanel>
LogInView.xaml
<StackPanel>
<TextBox Text="{Binding Text}"/>
<usercontrols:NumPad/>
</StackPanel>
LogInViewModel.cs
class LogInViewModel : NumPad
{
public LogInViewModel()
{
}
}
我想要的是检查每次改变文本数字键盘如果它的长度等于6通知LogInViewModel所以我可以运行一个搜索一些数据的方法,而不需要输入按钮,所以每次通过文本字符串添加到_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....
}
}