WPF MessageBoxes и DataTemplates

У меня есть объект, который в упрощенном виде выглядит следующим образом:

public class MyObject
{
     public bool Activate { 
     get { MessageBox.Show("My Status"); } 
     set { Do Some Stuff }
}

У меня есть DataTemplate, который сопоставляет свойство «Активировать» с флажком, например:

<DataTemplate x:Key="ComponentResourceKey TypeInTargetAssembly={x:Type local:PropertyGrid}, ResourceId={x:Type clr:Boolean}}">
      <CheckBox IsEnabled="{Binding Path=IsWriteable}" IsChecked="{Binding Path=Value}"/>
</DataTemplate>

Шаблон взят из элемента управления WPF Property Grid, который я использую. Проблема в том, что окно сообщения никогда не отображается, а главное окно ожидает ответа от окна. Я слышу звук уведомления об ошибке, когда ожидается вызов, но нет диалогового окна.

Есть ли что-то в WPF, что меняет z-порядок? Я работаю в контексте, которого не ожидаю?


person Adam Driscoll    schedule 16.12.2009    source источник


Ответы (1)


Вы никогда не должны показывать окно сообщения внутри геттера! Вместо этого используйте команды.

Если вы передаете MessageBox.Show вызов текущего окна в качестве параметра, оно должно отображаться модально.

person Matthias    schedule 16.12.2009
comment
Пробовал с командами, все равно то же самое. Команда привязана в XAML к главному окну. Затем команда выполняется из указанного выше свойства. Вызывается обработчик события для выполнения, и внутри обработчика находится MessageBox.Show. Я слышу звук диалогового окна, но оно не отображается. Любые идеи? - person Adam Driscoll; 16.12.2009
comment
Почему вы выполняете команду в геттере? Позвольте WPF выполнить его, используя одно из решений, которые вы найдете в Google, для сопоставления команд с событиями. - person Matthias; 16.12.2009
comment
Что я действительно искал, так это обработку проверки. Спасибо за попытку помочь и извините за упрямство. - person Adam Driscoll; 16.12.2009