您當然可以選擇綁定/依賴項屬性基礎結構來偵聽對嵌套屬性的更改。下面的代碼是WPF,但我相信你可以做同樣的事情在Silverlight:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Parent { Child = new Child { Name = "Bob" } };
this.SetBinding(ChildNameProperty, new Binding("Child.Name"));
}
public string ChildName
{
get { return (string)GetValue(ChildNameProperty); }
set { SetValue(ChildNameProperty, value); }
}
// Using a DependencyProperty as the backing store for ChildName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ChildNameProperty =
DependencyProperty.Register("ChildName", typeof(string), typeof(MainWindow), new UIPropertyMetadata(ChildNameChanged));
static void ChildNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("Child name is now " + e.NewValue);
}
}
所以我定義我自己DependencyProperty
,沒有任何UI本身(只是MainWindow
類)的一部分,並綁定「兒童.Name「直接。然後我可以在Child.Name
更改時收到通知。
這是否適合您?
這可以工作,但我希望這樣做沒有實際的UI控制開銷,或綁定到UI線程。如果我不再需要這種情況,我將如何取消訂閱通知? – kpozin
您不應該需要UI控件 - 任何派生自DependencyObject的對象都可以定義自己的DependencyProperty。取消訂閱應該像SetBinding(ChildNameProperty,null)一樣簡單。 –