5

在我的 WPF 应用程序中,我有一个布尔属性,我想向用户显示它(例如使用只读复选框)。通常我会实现 INotifyPropertyChanged 以便 WPF 可以对此采取行动并相应地更改复选框。

我现在遇到的问题是这个属性值是从一个封闭的框架中检索的。这意味着,我只能轮询该值,但没有我可以订阅的更改事件。

我的第一个想法是创建一个单独的线程,它定期(比如每 10 毫秒)轮询值并在值更改时创建一个事件。但这对我来说似乎有点矫枉过正。

所以我的问题是:WPF 中是否有显示更改值的功能,而 INotifyPropertyChanged 不是一个选项?也许是某种投票机制?如果没有,您将如何解决这个问题?

谢谢你的时间。

4

2 回答 2

4

如果该值来自您无法控制的某个地方,请为相关对象创建一个“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");
            }
        }
    }
}
于 2010-01-30T16:20:24.333 回答
0

我同意@Alastair。因为

(1) 您想从不通知您属性更改的封闭框架中检索值。
(2) 你可以轮询值,但你不想那样做!

我认为不会有任何其他方式可以做到这一点:(

于 2010-01-30T16:15:29.193 回答