0

我有一个Field对象集合,每个Field对象都实现INotifyPropertyChanged。字段对象内部有各种属性,但是我有一个名为的属性IsApproved,我需要监听任何更改。我的兴趣是,如果设置或取消设置该布尔标志,我需要得到通知,或者基本上我需要响应该事件(该属性将由 UI 通过 WPF 绑定设置或取消设置)。我可以为此使用 Reactive Extensions 吗,还是有点矫枉过正?如果不是,你会推荐什么?

代码:

public class Field : INotifyPropertyChanged
{
  private bool _isApproved;
        public bool IsApproved
        {
            get { return _isApproved; }

            set
            {
                if (_isApproved == value)
                    return;
                _isApproved = value;
                RaisePropertyChanged(() => IsApproved);
            }
        }

///has lots of other properties.
}

在我的视图模型中,我有一个Fields 的集合,我需要观察它们以查看IsApproved属性何时设置或取消设置它们中的任何一个或全部。我怎样才能做到这一点?

编辑:我有一个字段集合,一个可观察的集合,它绑定到一个项目控件。字段内的每个项目都使用数据模板呈现,并使用模板选择器选择模板。我的 IsApproved 属性绑定到每个数据模板中的复选框。我的页面上有一个按钮,单击该按钮应设置所有已批准的复选框。我有另一个按钮可跟踪所有批准的状态,基本上如果一切都已批准,则应启用该按钮(提交),如果有该字段未获批准,则应禁用该按钮。

4

2 回答 2

2

如果您需要做的就是在属性更改时更新 UI,您只需绑定到该属性即可完成(@sircodesalot 也提到过):

<Checkbox IsChecked="{Binding IsApproved}" />

但是,如果您想以编程方式侦听更改,则可以PropertyChanged像这样注册事件:

myField.PropertyChanged += (sender, e) =>
{
    if (e.PropertyName == "IsApproved")
    {
        // Do stuff
    }
}
于 2013-08-07T15:11:23.677 回答
0

如果您在窗口上有绑定,例如复选框:

<Checkbox IsChecked="{Binding IsApproved}" />

您应该在属性更改时收到通知。

也就是说,还可以构建允许在属性更改时进行回调的依赖属性。这与您的示例似乎表明的内容略有不同(但值得了解,因为它仍然密切相关)。考虑:

public partial class InfoBox : UserControl {

    public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(InfoBox),
        new FrameworkPropertyMetadata(TextPropertyChanged));


    public static void TextPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) {
        InfoBox infoBox = (InfoBox)sender;
        infoBox.ContentText.Content = args.NewValue;
    }

    public String Text {
        get { return (String)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
}

本质上,该类定义了一个TextProperty, 并创建了一个访问器(底部)。当我TextProperty使用 WPF (注册时DependencyProperty.Register,最后一个参数允许我指定一些配置选项 ( FrameworkPropertyMetadata),您可以使用它们来指定在属性更改时触发的回调。

于 2013-08-07T15:01:31.573 回答