我正在爲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));
任何幫助表示讚賞。
請發佈您的控件的xaml(使用NinjaSource時的部分),該問題可能存在 – DVD 2013-02-20 15:29:24
我的控件沒有任何XAML,但空白畫布除外。該控件完全由代碼 – roqvist 2013-02-20 19:58:12