在 Windows 10 應用程序中註冊任意依賴屬性的改變

仍然有許多證明指出,在 Windows Runtime 的 XAML 裏,缺失了很多 WPF 裏的特性。其中一項是在 WPF 中,可

以在依賴屬性發生改變時獲取到通知。現在,得益於 DependencyObject 類的RegisterPropertyChangedCallback

這個新方法,這項功能能夠在 Windows 應用程序上實現了。這將爲我們打開一個充滿機會的新世界。當我們創建自

定義控件或者對現有控件進行包裝的時候,這項功能顯得十分的有用。

與其去深入一些複雜的東西,我更傾向於使用一個快速的例子。一個擁有文本的文本框,但是沒有辦法在文本發生改

變時得到通知。當然,我們也可以使用數據綁定,綁定到 Text 屬性上,但是,現在請先忽略它。

現在,我們創建兩個文本框和一個按鈕:

<StackPanel>
    <TextBlock x:Name="CounterText"/>
    <Button Content="Click me" Click="OnButtonClicked"/>
    <TextBlock x:Name="DuplicateTextBlock"/>
</StackPanel>


當這個按鈕被點擊的時候,我們將設置第一個文本框的文本:

private int _counter;
 
private void OnButtonClicked(object sender, RoutedEventArgs e)
{
    CounterText.Text = string.Format("Clicked {0} times", ++_counter);
}


同時,我們也爲 CounterText 這個文本框註冊一個 Text 屬性變化的回調函數。在回調函數裏,我們將設置另一個文

本框的文本:

public MainPage()
{
    this.InitializeComponent();
 
    CounterText.RegisterPropertyChangedCallback(TextBlock.TextProperty, OnTextChanged);
}
 
private void OnTextChanged(DependencyObject sender, DependencyProperty dp)
{
    var t = (TextBlock)sender;
 
    DuplicateTextBlock.Text = t.Text;
}

現在,你每一次點擊按鈕,都會設置第一個文本框的文本,並且回調函數將會觸發並設置第二個文本框的文本!

下面我再作一些補充,在我嘗試在Windows Phone 8.1 runtime平臺下寫的時候,是不存在這種方法的。

同時本篇博客可以對照着我之前的一篇關於屬性更改通知的博客看,這樣更容易對比和理解:

博客地址:Windows Phone 8.1中綁定數據轉換

博客地址:Windows Phone 8.1中數據綁定之二(綁定數據不變更的解決方案)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章