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