ObservableCollection<Worker>
을 표시하는 DataGrid가 있습니다. 셀을 두 번 클릭하면 선택한 Worker
에 대한 데이터를 표시하고 사용자가 특정 속성을 수정할 수있는 새 창이 열립니다. 이 하위 창에는 '수락'및 '취소'버튼이 있습니다. 제 의도는 '수락'또는 '취소'가 클릭 될 때까지 Worker
에 대한 변경을 일시적으로하는 것입니다. '수락'을 클릭하면 이러한 변경 사항을 영구히 적용하고 '취소'를 클릭하면 삭제됩니다. 나는 아직 이것을 할 수있는 방법을 찾을 수 없었다. ExecuteHireCommand
이 활성화되면 데이터는 즉시 주 프로젝트로 다시 전송됩니다. '동의'를 클릭하면 영구적 인 변경 만 수행 할 수있는 방법이 필요합니다. 당신이 줄 수있는 조언은 크게 감사 할 것입니다.하위 창의 개체에 대한 보류중인 변경
public class WorkerWindowViewModel : ViewModelBase
{
#region Members
private Worker _worker;
#endregion
#region Properties
public string WindowKey { get; set; }
public Worker Worker
{
get { return _worker; }
set
{
if (_worker == value)
return;
_worker = value;
RaisePropertyChanged(() => Worker);
}
}
#endregion
#region Construction
public WorkerWindowViewModel()
{
CreateCommands();
}
#endregion
#region Methods
private void CreateCommands()
{
HireCommand = new RelayCommand(() => ExecuteHireCommand());
AcceptCommand = new RelayCommand(() => ExecuteAcceptCommand());
CancelCommand = new RelayCommand(() => ExecuteCancelCommand());
}
#endregion
#region Commands
public RelayCommand HireCommand { get; private set; }
public RelayCommand AcceptCommand { get; private set; }
public RelayCommand CancelCommand { get; private set; }
private void ExecuteHireCommand()
{
Worker.IsEmployed = true;
Worker.Employer = DataManager.Data.MasterGuildList[0];
}
private void ExecuteAcceptCommand()
{
Messenger.Default.Send<Worker>(Worker);
Messenger.Default.Send<CloseWindowMessage>(new CloseWindowMessage(), WindowKey);
}
private void ExecuteCancelCommand()
{
Messenger.Default.Send<CloseWindowMessage>(new CloseWindowMessage(), WindowKey);
}
#endregion
}
도움이된다면, 다음은 하위 창이 생성되는 방법입니다.
Messenger.Default.Register<OpenWorkerWindowMessage>(this, message =>
{
var uniqueKey = System.Guid.NewGuid().ToString();
var workerWindowVM = SimpleIoc.Default.GetInstance<WorkerWindowViewModel>(uniqueKey);
workerWindowVM.Worker = message.Argument;
workerWindowVM.WindowKey = uniqueKey;
var workerWindow = new WorkerWindowView(uniqueKey)
{
DataContext = workerWindowVM,
Owner = this
};
workerWindow.Closed += (sender, args) => SimpleIoc.Default.Unregister(uniqueKey);
workerWindow.Show();
});
나는 그 줄에 뭔가있는 것으로 생각했다. 불행히도, 어떻게 해야할지 모르겠다. –
MVVM이 아니기 때문에 더 이상 도움을 줄 수는 없지만 ObservableCollection의 목적은 변경 내용을 즉각적으로 알리는 것이므로 내용에 대해 무시할 수있는 업데이트를하고 싶지는 않습니다. – Zenilogix
계속 찾아 볼 것입니다. 당신의 도움을 주셔서 감사합니다. –