콤보 박스가있는 창이 있습니다. 이 콤보 상자에는 5 개의 콤보 박스 항목이 있습니다. 예에서 MVVM이 아닌 SelectedItem을 수정하십시오.
나는 내가 두 가지 방법으로 시도했습니다 3, 4, 5항목을 선택할 수 없습니다 것을 원하는 : MVVM 방법 및 코드 숨김 방법을
MVVM 방법 :
XAML :
<ComboBox SelectedIndex="{Binding Path=SaveIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=SaveSelectedItemCheck}" Name="SaveCombobox">
,
의 ViewModel :
public object SaveSelectedItemCheck
{
get { return _control.SaveCombobox.Items[CurrentSaveIndex]; }
set
{
if (value != _control.SaveCombobox.Items[0] && value != _control.SaveCombobox.Items[1])
{
OnPropertyChanged("SaveSelectedItemCheck");
}
}
}
코드 숨김 방법 :
XAML :
<ComboBox SelectedIndex="{Binding Path=SaveIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="Save_SelectionChanged">
코드 숨김 :
private void Save_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox combobox = sender as ComboBox;
if(combobox == null)
{
return;
}
if (combobox.SelectedItem != combobox.Items[0] && combobox.SelectedItem != combobox.Items[1])
{
combobox.SelectedItem = combobox.Items[1];
e.Handled = true;
}
}
그러나 그것은 단지 더럽 코드 숨김 방식으로 작동합니다 .
MVVM 방식으로 작동하지 않는 이유는 무엇입니까?
왜 selectedindex와 selecteditem에 바인딩합니까? 그냥 SelectedItem을 사용하십시오. 또 다른 방법은 ItemsSource를 CollectionView에 바인딩하는 것입니다. collectionView에는 selected 속성이 포함되어 있으므로 선택한 항목에 바인딩해야합니다. –