2016-05-23 10 views
0

Справочная информация:XAML обновление UI INotifyPropertyChanged

У меня есть приложение, которое имеет список CheckBox х годов и Button. Если пользователь выбирает (или несколько) CheckBox и нажимает кнопку, обработчик события Button проверяет, какой CheckBox установлен. Исходя из этого, он запускает процесс (т. Е. Gpupate).

Тогда у меня есть изображение (Visibility = "hidden") рядом с CheckBox в XAML. После нажатия кнопки код позади устанавливает его на Visibility.Visible.

После завершения процесса источник изображения изменяется на другое изображение. Басически, первое изображение показывает, что процесс запущен, второе изображение - это проверка, показывающая его завершение.

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

Однако, поскольку я не использую какое-либо свойство, я не могу привязывать его к чему-либо (или, может быть, к чему-то не хватает) и интерфейсу INPC.

Как реализовать интерфейс (или аналогичную функциональность).

XAML код

<StackPanel Orientation="Horizontal"> 
    <Image x:Name="oneImage" 
      Source="{StaticResource inProcessImage}" 
      Visibility="Hidden" /> 

    <CheckBox x:Name="oneCheckBox" 
       Content="CheckBox" 
       Style="{StaticResource normalCheckBox}"/> 
</StackPanel> 

Код За внутри кнопки обработчик событий

if (oneCheckBox.IsChecked ?? false) 
{ 
    oneImage.Visibility = Visibility.Visible; 
    await Task.Run(() => 
    { 
     //run GPUpdate 
    }); 
    deleteHistoryImage.Source = (ImageSource)Resources["doneCheckImage"]; 
} 

У меня нет ничего относительно реализации интерфейса, потому что я не знаю, что мне нужно сделать, чтобы связать Visibility модификатор ,

+0

Вам понадобится модель представления, содержащая ваши свойства, с которыми вы будете связываться. Codebehind не имеет к этому никакого отношения (за исключением того, что он может содержать экземпляр модели представления, хотя я предпочитаю реализацию шаблона Singletone на этом). –

ответ

0

Это не то, что вы ищете, но оно обновит GUI вручную.

public void UpdateUI() { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { })); }

вызов UpdateUI(); после изменения видимости.

+0

спасибо, он обновил интерфейс. будет выглядеть в синглтон, как предлагал @trade. – Omar