У меня есть поле со списком с настраиваемым перечислением (только true / false). У меня есть функция, которая проверяет условия, если SelectedValue изменяется с false на true, и если условия неверны, она меняет поле со списком SelectedValue обратно на false. Это изменяет SelectedValue на false, если вы проверяете его в коде, но когда вы смотрите на пользовательский интерфейс, он все еще имеет значение true.
Вот xaml для поля со списком:
<ComboBox x:Name="comboEnabled1" Width="80" Height="26"
ItemsSource="{Binding Path=TrueFalseChoices}"
SelectedValue="{Binding Path=Enable1, Mode=TwoWay}"/>
Вот модель просмотра
private TrueFalse _enable1 = TrueFalse.False;
public TrueFalse Enable1
{
get { return _enable1; }
set
{
if (_enable1 != value)
{
_enable1 = value;
base.OnPropertyChanged("Enable1");
OnEnableChanged(EventArgs.Empty);
}
}
}
А вот функция, которую я использую для проверки условий
public void HandleEnable(object sender, EventArgs e)
{
if(Enable1 == TrueFalse.True)
{
if(!connected)
{
HandleMessage("Can't enable, not connected");
Enable1 = TrueFalse.False;
}
else if (!_main.CBCheck(_main.cbReason))
{
Enable1 = TrueFalse.False;
}
}
Console.WriteLine("Enabled {0}", Enable1);
}
Я думал, что меняю значение слишком быстро, но последняя версия Console.Writeline выдает правильный результат каждый раз.
Любая помощь приветствуется!
Edit: Calling Handleenable здесь:
protected void OnEnableChanged(EventArgs e)
{
EventHandler handler = EnableChanged;
if (handler != null)
handler(this, e);
}
И в функции ViewModel:
EnableChanged += HandleEnable;
Изменение Enable1 в любом другом месте сработало так, как должно было, только возникли проблемы с функцией HandleEnable. Также попытался изменить другие поля со списком в функции HandleEnable, и это сработало так, как должно было.