Я изучаю MVVM прямо сейчас. Поскольку я видел, что многие учебники или проекты используют только View и ViewModel, я немного смущен. Это мой код.Как поместить свойство guard в этот код?
МОДЕЛЬ:
public class StudentModel : PropertyChangedBase
{
private String _firstName;
public String FirstName
{
get { return _firstName; }
set
{
_firstName = value;
NotifyOfPropertyChange(() => FirstName);
}
}
private Double _gradePoint;
public Double GradePoint
{
get { return _gradePoint; }
set
{
_gradePoint = value;
NotifyOfPropertyChange(() => GradePoint);
}
}
}
ВИД:
<UserControl x:Class="MVVMLearningWithCaliburnMicro.Views.StudentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org">
<Grid Width="525" Height="300" Background="Lavender">
<DockPanel>
<TextBlock HorizontalAlignment="Center" Text="Student Data"
DockPanel.Dock="Top" FontSize="20" />
<StackPanel Orientation="Vertical" HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Margin="0,8" DockPanel.Dock="Top">
<StackPanel Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Name" FontSize="15" Margin="5,0" />
<TextBox Name="txtName" Text="{Binding Path=Student.FirstName}" Width="250" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Grade" FontSize="15" Margin="5,0" />
<TextBox Name="txtGrade" Text="{Binding Path=Student.GradePoint}" Width="250" />
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5" HorizontalAlignment="Center"
VerticalAlignment="Bottom"
DockPanel.Dock="Bottom">
<Button Name="btnSave" Width="100" Height="40"
cal:Message.Attach="SaveStudent">
<TextBlock Text="Save" FontSize="15" />
</Button>
</StackPanel>
</DockPanel>
</Grid>
</UserControl>
ViewModel:
public class StudentViewModel
{
public StudentModel Student { get; set; }
public void SaveStudent()
{
MessageBox.Show(String.Format("Saved: {0} - ({1})", Student.FirstName, Student.GradePoint));
}
public StudentViewModel()
{
Student = new StudentModel { FirstName = "Tom Johnson", GradePoint = 3.7 };
}
private Boolean CanSaveStudent()
{
return Student.GradePoint >= 0.0 || Student.GradePoint <= 4.0;;
}
}
Q:
1. Как я могу поместить свою охрану с NotifyOfPropertyChange()
в Модели?
2. (Глупый вопрос) Является ли мой шаблон MVVM правильным?
Что свойство охранник? –
Кстати, вы, вероятно, даже не нуждаетесь в модели представления в этом случае. Обычно View должен привязываться к свойствам ViewModel, которые запускают NotifyPropertyChanged и распространяют изменения в модели. Не подразумевая, что вы делаете это неправильно, просто мои небольшие центы. –
Свойство Guard - это свойство, которое используется для охраны события. Это похоже на проверку при запуске события. – asakura89