Я реализовал простое свойство DependencyProperty в своем элементе управления WPF, чтобы использовать его в Binding.
public static readonly DependencyProperty PollingProperty = DependencyProperty.Register("Polling", typeof(Polling), typeof(ConverterView), new UIPropertyMetadata(null));
public Polling Polling
{
get { return (Polling)GetValue(PollingProperty); }
set { SetValue(PollingProperty, value); }
}
Сам элемент управления установлен как DataContext, поэтому в XAML я просто использую его так:
<ProgressBar Height="25" Value="{Binding Path=Polling.Progress, Mode=OneWay}" />
Polling.Progress - целочисленное свойство, которое реализует INoftiyPropertyChanged, поэтому изменения переносятся в пользовательский интерфейс. Все работает нормально, и изменения на «Прогресс» отображаются в ProgressBar, как и ожидалось.
Однако в моем приложении есть определенный момент, когда к DependencyProperty применяется новый экземпляр "Polling".
Polling = new Polling(); Polling.Start();
После этого привязка больше не оценивается, и ProgressBar остается на последнем значении старого экземпляра.
Обновление:
Поскольку мой случай, возможно, немного конкретен, я объясню немного подробнее.
Кнопка на WPF-Control ConverterView позволяет пользователю начать операцию:
private void cmdAusformatieren_Click(object sender, RoutedEventArgs e)
{
Polling = Document.Converter(ConvertFinished);
}
Convert-метод принимает делегата в качестве параметра, который будет вызван после завершения операции. (Весь процесс выполняется асинхронно.)
Метод Convert возвращает Polling -объект, который предоставляет целочисленное свойство Progress, которое предоставляет информацию, которую я хочу отобразить в ProgressBar.
(Что может вводить в заблуждение, опрос - это имя моего DependencyProperty, а также имя моего класса).
Насколько это все нормально, и Привязка к опросу. Прогресс работает.
В моем случае ConvertFinished (), который срабатывает после выполнения первой операции, я получаю новый экземпляр Polling и хочу использовать его в Binding с тех пор.
private void ConvertFinished(object result)
{
Polling = Document.Format((byte[])result, FormatFinished);
}
После этого присвоения моему опросу DependencyProperty привязка больше не обновляется и остается с прежним значением.