我已阅读了多个教程,但大多数教程都以某种方式解释它,就像每个人都有MVVM经验一样。我知道像Model,ViewModel等基础知识。
现在我想创建一个包含FirstName
,LastName
的简单应用程序以及我希望稍后显示FullName
的标签。
从Persons Class开始:
public class Student
{
public string FirstName { set; get; }
public string LastName { set; get; }
public string FullName
{
get
{
return this.FirstName + " " + this.LastName;
}
}
}
这应该是正确的,对吧?
我的ViewModel如下所示:
public class StudentViewModel : ViewModelBase
{
private Student _Student = new Student();
public string FirstName
{
get { return _Student.FirstName; }
set
{
_Student.FirstName = value;
NotifyPropertyChanged("FirstName");
}
}
public string LastName
{
get { return _Student.LastName; }
set
{
_Student.LastName = value;
NotifyPropertyChanged("LastName");
}
}
public string FullName
{
get { return _Student.FullName; }
}
}
这也是正确的吗?
最后但并非最不重要:
按下按钮时,如何实际显示FullName
?
答案 0 :(得分:1)
如你所说,你是MVVM的新手,在这种情况下你的代码是好的, 但我会为“学生”课提出不同的方法;
public class Student
{
private string _firstName;
private string _lastName;
public Student(string firstName, string lastName)
{
_firstName = firstName;
_lastName = lastName;
}
public string FullName
{
get
{
return _firstName + " " + _lastName;
}
}
}
您的viewmodel类没问题。
要按下按钮上显示全名,您需要注册“按钮点击事件”或“按钮命令”。
您可以在.xaml文件中创建标签,并在视图模型中使用“全名”属性进行绑定。 还可以在viewmodel中使用命令绑定你的按钮,如。
在.xaml文件中 像这样修改视图模型
public class StudentViewModel : ViewModelBase
{
public StudentViewModel
{
ButtonCommand = //Initilaize it with relay command class.
}
//... Other stuff goes here
ICommand ButtonCommand { get; private set; }
private void OnButtonCommand()
{
NotifyPropertyChanged("FullName");
}
}
答案 1 :(得分:0)
正如@Tim在评论中所说,您需要从每个可能导致NotifyPropertyChanged("FullName")
更改的属性设置器中调用FullName
(在这种情况下,FirstName
和LastName
)。
这将导致:
public string FirstName
{
get { return _Student.FirstName; }
set
{
_Student.FirstName = value;
NotifyPropertyChanged("FirstName");
NotifyPropertyChanged("FullName");
}
}
public string LastName
{
get { return _Student.LastName; }
set
{
_Student.LastName = value;
NotifyPropertyChanged("LastName");
NotifyPropertyChanged("FullName");
}
}
通过上述更改,如果您只想显示基于名字和姓氏的全名,则不需要按钮。你真正需要做的就是在你的XAML中有一个绑定到FullName
的TextBlock,如下所示:
<TextBlock Text="{Binding FullName}" />
随着名字或姓氏的更新,将立即发送通知,导致TextBlock更新为新的FullName
。
你对这个按钮有什么想法?按下它会发生什么?
根据OP的评论,我添加了一个如何使用Button的示例。
首先将您的XAML更改为:
<TextBlock Text="{Binding FullName}" Visibility="{Binding FullNameVisibility}" />
<Button Content="Display Full Name" Command="{Binding ShowFullNameCommand}" />
其次,将您的视图模型更改为:
public Visibility FullNameVisibility { get; private set; }
public ICommand ShowFullNameCommand { get; private set; }
public StudentViewModel(Student student)
{
_Student = student;
FullNameVisibility = Visibility.Hidden;
ShowFullNameCommand = new RelayCommand(() => FullNameVisibility = Visibility.Visible);
}
启动应用时,系统会隐藏全名。当用户单击该按钮时,将显示全名。
请注意,这假设您使用的是MVVM Light(具有RelayCommand
)。如果您使用的是其他MVVM库,那么该命令可能会被调用。