WPF: Показать изменение свойства без реализации интерфейса INotifyPropertyChanged - PullRequest
5 голосов
/ 30 января 2010

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

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

Моей первой мыслью было создание отдельного потока, который периодически (скажем, каждые 10 миллисекунд) опрашивает значение и создает событие, когда значение изменяется. Но это кажется мне излишним.

Итак, мой вопрос: есть ли в WPF функция для отображения изменяющихся значений, когда INotifyPropertyChanged не является опцией? Может быть, какой-то механизм опроса? Если нет, то как бы вы решили эту проблему?

Спасибо за ваше время.

Ответы [ 2 ]

4 голосов
/ 30 января 2010

Если значение приходит откуда-то, что вы не можете контролировать, создайте «ViewModel» для рассматриваемого объекта и обработайте его самостоятельно.

public class ClosedSourceObjectViewModel : ViewModelBase
{
    private ClosedSourceObject ClosedSourceObject
    {
        get;
        set;
    }

    public bool SomeProperty
    {
        get { return this.ClosedSourceObject.SomeProperty; }
        set
        {
            if (value != this.ClosedSourceObject.SomeProperty)
            {
                RaisePropertyChanging("SomeProperty");
                this.ClosedSourceObject.SomeProperty = value;
                RaisePropertyChanged("SomeProperty");
            }
        }
    }
}
0 голосов
/ 30 января 2010

Я согласен с @Alastair. Потому что

(1) Вы хотите получить значение из закрытой структуры, которая не уведомляет вас об изменении свойства.
(2) Вы можете опросить значение, но вы не хотите этого делать!

Не думаю, что будет другой способ сделать это: (

...