На мой взгляд, модель, у меня есть следующие свойства:WPF Binding не обновляется
public Visibility IsModelBusy { get; set; }
У меня есть длинный задачи обработки, что делает:
private void DoSomething(object obj)
{
IsModelBusy = Visibility.Visible;
OnPropertyChanged("IsModelBusy");
DoHeavyWork();
IsModelBusy = Visibility.Collapsed;
OnPropertyChanged("IsModelBusy");
}
У меня есть элемент пользовательского интерфейса, который связан в IsModelBusy
:
<Border Visibility="{Binding IsModelBusy, UpdateSourceTrigger=PropertyChanged}">
...
</Border>
ПРОБЛЕМА Моя граница никогда не становится видимой, а главное окно зависает, пока тяжелая задача продолжается (я не могу запустить это в фоновом потоке) Я пробовал обернуть измененный вызов свойства в действии, переданном диспетчеру, не повезло, проблема по-прежнему сохраняется.
Теперь, если я это сделать:
private void DoSomething(object obj)
{
IsModelBusy = Visibility.Visible;
OnPropertyChanged("IsModelBusy");
MessageBox.Show("What the..."); <=========
DoHeavyWork();
IsModelBusy = Visibility.Collapsed;
OnPropertyChanged("IsModelBusy");
}
С введением MessageBox
, пользовательский интерфейс, кажется, обработать свойство изменилось события и обновления правильно.
ВОПРОС без использования фоновых задач, как я могу заставить пользовательский интерфейс для обработки PropertyChanged
события?
Вы пробовали настройки 'Binding Mode' на' Two-Way'? Я считаю, что Visibility по умолчанию «One-Way». –
> Я не могу запустить это в фоновом потоке - не могли бы вы объяснить, почему? – Dennis
Кто звонит DoSomething()? –