Я не совсем уверен, почему вы используете событие SelectionChanged здесь.Вам нужно только работать с измененным свойством элемента, выбранным в выпадающем списке, и это легко сделать с помощью привязки.
Вот мое грубое мышление, я надеюсь, что это поможет.(Обратите внимание, что я только что набрал его без обращения к VS).
В вашей ViewModel все, что вам нужно, это следующее:
private MrMan fieldMrMan;/// best to ensure that this is instanciated.
private List<MrMan> fieldMrMen;/// best to ensure that this is instanciated.
public bool IsGrumpy
{
get{return this.fieldMrMan.IsGrumpy;}
set
{
if(this.fieldMrMan.Name!="MrGrumpy")
this.fieldMrMan.IsGrumpy=value;
}
public MrMan MrManSelected
{
get{return this.fieldMrMan;}
set
{
if(value == this.fieldMrMan)
return;
///Raise property change event here
}
}
public List<MrMan> MrMen
{
get{return fieldMrMen;}
}
Затем, по вашему мнению,
<ComboBox x:Name="mrmenName" ItemsSource="{Binding MrMen}" SelectedItem="{Binding MrManSelected}"/>
Это справляется с изменением выбора с MrHappy на MrGrumpy.
Тогда у вас будет dataModel для вашего
public class MrMan
{
public MrMan(string name, bool grumpy)
{
this.Name = name;
this.IsGrumpy = grumpy;
}
public string Name{get;set;}
public bool IsGrumpy{get;set;}
}
Очевидно, что ваши классы MrMan уже созданы и инициализированыв любом случае с данными из некоторого репозитория.
Подумав об этом, вы можете переопределить настройку свойства IsGrumpy в модели данных MrMan, а не в ViewModel, но это зависит от вас.