我有以下视图和viewModels视图:Staff,VM:StaffViewModel和View:Notes,VM:NotesViewModel。wpf mvvmlight将数据传递给viewmodel
我的StaffViewModel具有SelectedEmployee类型的SelectedStaffMember属性。
工作人员视图有一个启动另一个视图(注)的按钮。
当用户输入笔记时,我需要将其保存为SelectedEmployee,这意味着NotesViewModel需要知道当前选定的员工ID。
现在通过我的ViewModelLocator做到这一点,但这似乎是错误的,什么是将数据传递给虚拟机的相关方式?
我正在使用MVVM Light。
相关的代码 - StaffViewModel
public Employee SelectedEmployee
{
get { return _selectedEmployee; }
set
{
if (value == _selectedEmployee) return;
_selectedEmployee = value;
HolidayAllowance = _staffDataService.GetEmployeeHolidayAllowance(_selectedEmployee.Id);
RaisePropertyChanged();
RaisePropertyChanged(nameof(HolidayAllowance));
}
}
NoteViewModel
public RelayCommand SaveNoteCommand { get; private set; }
private void SaveNote()
{
var note = new Note
{
NoteContent = NoteContent,
EmployeeId = ViewModelLocator.Staff.SelectedEmployee.Id,
NoteDate = NoteDate
};
_dataService.SaveNote(note);
}
我使用MahApps弹出按钮来显示添加备注的观点: 这是显示的视图,其启动MainView.xaml NOT Staff.xaml,我认为这将是另一个获得SelectedEmployee ID的问题:
MainView.xaml
<controls:Flyout Name="AddNoteFlyout"
Header="Add Note"
IsModal="True"
IsOpen="{Binding IsAddNoteOpen}"
Opacity="85"
Position="Right"
Width="450">
<views:AddNote VerticalAlignment="Top" Margin="0,30,0,0"/>
</controls:Flyout>
即时考虑发射一个消息的按钮点击启动视图,我的工作人员的观点将注册。该消息将包含selectedEmployeeId。这是更好的方法吗?