2012-05-30 4 views
1

В моей форме есть флажок, который привязан к логическому значению в моей модели. Существует специальный случай, когда пользователь нажимает на этот флажок, задается вопрос и может отвечать «нет». В этом случае действие не выполняется, и флажок не должен быть проверен.Отмена checkbox Проверить событие

Я пробовал с несколькими вариантами этого, но он не будет работать, в том смысле, что модель правильно установлена ​​в ложную, но флажок в пользовательском интерфейсе все равно проверяется.

private bool _isName = false; 
public bool isName { 
    get { return _isName; } 
    set { 
    if (value && specialCase) { 
     if(user answers no) 
      value = false; 
    } 
    _isName = value; 
    NotifyPropertyChanged("isName"); 
    } 
} 

Как это сделать?

+0

Я надеюсь, что вы фактически не вызываете приглашение пользователя в середине вашего сеттера ... Если вы используете MVVM, который является * alless bad *. –

+0

@HiTechMagic совет принят. – Palantir

ответ

0

Создайте пользовательский MessageBox, который получит команду и команду отмены и команду, которую вы будете вызывать, если пользовательский ввод положительный. Затем создайте два дополнительных метода: ViewModel, которые будут нести ответственность за изменение свойства isName. В xaml добавьте EventTrigger в CheckBox на событие Click, в котором отображается пользовательское MessageBox. Затем свяжите команды, которые отвечают за изменение свойства MessageBox.

Если вам нужны образцы кода или более подробные пояснения, я предоставлю их.

+0

Таким образом, это связано с подключением события Click. – Palantir

+0

Вы можете выбрать любое событие, которое вы хотите (проверено, не отмечено и т. Д.): [CheckBox Events] (http://msdn.microsoft.com/en-us/library/system.windows.controls.checkbox_events (v = vs.95) .aspx) –

+0

Использование 'MessageBox' (или' DialogBox', как мы его называем), мы развязываем логику и представление логики ViewModel, которая в основном является тем, что мы хотим с MVVM. –

0

OK только для решения прямой задачи с этой штукой, это работает:

... 
if(user answers no) { 
    value = false; 
    myUiElement.Dispatcher.BeginInvoke(
      () => { isName = false; } 
    }; 
} 
... 

Однако, как предположил @HiTech Магия, это blatanlty нарушает здравомыслящих принципы программного обеспечения, поэтому я перешел к более тонким способом, чтобы их нарушать ,

Смежные вопросы