1

我正在为C#中的Windows 8商店应用程序定制控制器。 我加了一些DependencyProperties;一些简单的(如下面的Radius)以及用于构建和绘制各种形状的自定义项目集合(NinjaSource)。收集更改中的值时发出通知

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

收集看起来像这样

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

而且忍者类主要有一些属性,并实现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)); 

任何帮助表示赞赏。

+0

请发布您的控件的xaml(使用NinjaSource时的部分),该问题可能存在 – DVD 2013-02-20 15:29:24

+0

我的控件没有任何XAML,但空白画布除外。该控件完全由代码 – roqvist 2013-02-20 19:58:12

回答

0

你想要做的是将ObservableCollection作为NinjaSource公开。创建一个包含可观察集合的自定义对象。公开特定的添加删除方法,这将允许您然后引发事件。

+0

构建。我的问题不在于添加和删除集合中的项目,而是更新集合对象中的属性。 ObservableCollection是自定义对象的一部分,我将其用作使用该控件的页面的数据源。 – roqvist 2013-02-20 19:56:33

+0

如果项目更新,是否要修改集合?你只需要提出相应的proprtychanged事件 – 2013-02-21 06:38:16