集合中的值更改时的通知



我正在为C#中的Windows8商店应用程序开发一个自定义控制器。我添加了一些DependencyProperty;一些简单的项目(如下面的Radius)和用于构建和绘制各种形状的自定义项目的集合(NinjaSource)。

<StackPanel>
    <cc:NinjaControl Margin="120,0,0,0" NinjaSource="{Binding NinjaCollection}" Radius="45"/>
</StackPanel>

该系列看起来像这个

public ObservableCollection<Ninja> NinjaCollection{ get; set; }

Ninja类基本上具有一些属性并实现了INotifyPropertyChanged

public class Ninja : INotifyPropertyChanged
    {
        private string _name;
        private double _value;
        private Path _path;
        private bool _showName;
        public string Name
        {
            get { return _name; }
            set
            {
                if (value == _name) return;
                _name = value;
                OnPropertyChanged();
            }
        }
        ...

每当一个简单的属性(如Radius)发生更改时,我的自定义控件就会拾取它并像这样重新绘制:

public sealed partial class NinjaControl: UserControl
{
        public static readonly DependencyProperty RadiusProperty =
            DependencyProperty.Register("Radius", typeof (double), typeof (NinjaControl),
                                        new PropertyMetadata(default(double), PropertyChangedCallback));
        ...
        private static void PropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            var instance = o as NinjaControl;
            if (instance == null) return;
            instance.RedrawMyControl();
        }

这非常有效,我可以将Radius绑定到我想要的任何内容,并且每当PropertyChangedCallback发生变化时都会调用它。

每当NinjaCollection中的任何值发生变化时,我都希望发生同样的事情。

我有一个为实际集合注册的DependencyProperty,带有属性包装器,但我相信它只会查看对实际集合的更改,而不会查看其中的值。

    public static readonly DependencyProperty NinjaSourceProperty = 
DependencyProperty.Register("NinjaSource", typeof(ObservableCollection<Ninja>), typeof(NinjaControl), new PropertyMetadata(new ObservableCollection<Ninja>(), PropertyChangedCallback));

感谢您的帮助。

您想要做的是不将ObservableCollection公开为NinjaSource。创建一个包含可观察集合的自定义对象。公开特定的Add-Remove方法,这些方法将允许您引发事件。

相关内容

  • 没有找到相关文章

最新更新