나는 ComboBox of Employers가있다. 고용주를 선택하면, 테이블은 고용주 특정 데이터로 채워진 : 여기 WPF ComboBox가 변경 될 때 변경됨
<ComboBox Name="EmployerListBox"
IsReadOnly="True"
ItemsSource="{Binding EmployerCollection, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedEmployer, UpdateSourceTrigger=PropertyChanged}"
Width="150" />
그것이 결합되어있는 속성 테이블 더러운 있는지 여부를 확인하는 방법이다.
/// <summary>
/// Selected Employer
/// </summary>
public String SelectedEmployer
{
get
{
return _SelectedEmployer;
}
set
{
if (_SelectedEmployer != value && CanChangeEmployer())
{
_SelectedEmployer = value;
NotifyPropertyChanged(m => m.SelectedEmployer);
GetGarnishmentsTableView();
}
}
}
private String _SelectedEmployer = "";
/// <summary>
/// Method that executes each time user wants to change employers
/// </summary>
public Boolean CanChangeEmployer()
{
Boolean _returnValue = true;
if (GarnishmentsTableIsDirty)
{
_returnValue = false;
MessageBoxResult _change =
MessageBox.Show("There are unsaved changes. " +
"Changing Employers will lose any unsaved changes. \n\n" +
"Are you sure you want to change Employers?", "Unsaved Changes", MessageBoxButton.YesNo);
if (_change == MessageBoxResult.Yes)
{
// OK to switch employers
_returnValue = true;
}
}
return _returnValue;
}
모든 것이 제대로 작동하려면 나타납니다 : 테이블이 더러운 경우, 사용자들은 고용주가 변경하는 경우 변경 내용이 손실 될 수 있다는 메시지가 표시됩니다
- 사용자는 고용주 ('KMH')를 선택하는 업데이트 표.
- 사용자가 테이블을 변경합니다.
- 사용자는
- 사용자가 변경 '없음'
- 사용이 선택됩니다 손실되고 (변경하지 않습니다 CanChangeEmployers 반환 '거짓'
- SelectedEmployer이 경우 생략 할 수 있다는 메시지가 표시되고 다른 고용주 ('MPC')를 선택 {} 블록
그러나 SelectedEmployer가 변경되지 않았더라도 고용주 옵션이 사용자가 선택한 고용주 ('MPC')로 변경됩니다.
ComboBox를 스누핑하면 ComboBox SelectedItem이 원래의 Employer ('KMH')로 올바르게 설정되어 있지만 SelectedValue와 SelectionBoxItem이 모두 새 Employer ('MPC')로 설정되어있는 것을 볼 수 있습니다.
나는 다음 SelectedEmployer에 바인딩 ComboBox-> SelectedValue을 시도 : <ComboBox Name="EmployerListBox"
IsReadOnly="True"
ItemsSource="{Binding EmployerCollection, UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding SelectedEmployer, UpdateSourceTrigger=PropertyChanged}"
Width="150" />
를 그리고 GUI가 표시되는 같은 잘못된 회사입니다. 그러나 이번에 스눕은 ComboBox-> SelectedValue가 원래 고용주 ('KMH')에게 올바르게 설정되어 있지만 SelectedItem과 SelectionBoxItem이 모두 새 고용주 ('MPC')로 설정되어 있음을 보여줍니다.
GUI가 선택된 고용주와 일치하도록 SelectedEmployer를 올바르게 바인딩하려면 어떻게합니까?
CanChangeEmployer()가 false를 반환하는 경우 NotifyPropertyChanged (...)를 호출 해보십시오. 그렇지 않으면 바인딩 하위 시스템에서 SelectedEmployer 속성이 실제로 지정된 값으로 설정되었다고 가정 할 수 있습니다. 실제로는 업데이트되지 않았습니다. –
[MVVM을 사용하여 WPF에서 콤보 상자 선택 취소] 가능한 복제본 (http://stackoverflow.com/questions/7800032/cancel-combobox-selection-in-wpf-with-mvvm) –