我有以下視圖和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。這是更好的方法嗎?