更改通知

2018-08-12 21:55 更新

更改通知

Silder 綁定到 TextBlock,不使用更改通知

首先定義一個(gè)簡單的類 BindingSlider,同時(shí)在 XAML 中作如下定義。

    public class BindingSlider
    {
        private int sliderValue;
        public int SliderValue
        {
            get
            {
                return sliderValue;
            }
            set
            {
                sliderValue = value;
            }
        }
    }
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Slider Name="slider1" Minimum="0" Maximum="100" Width="200" Value="{Binding SliderValue,Mode=TwoWay}"/>
    <Button x:Name="button" Content="Button" Width="200" Click="button_Click"/>
    <TextBlock Name="textBlock" FontSize="30"/>
</StackPanel>

雖然這里只是用到了 OneWay 傳遞,但還是需要使用 TwoWay。因?yàn)樵谶@里 OneWay 是指從 BindingSlider 類的 SliderValue 屬性單向傳遞到 Slider 控件的 Value 屬性。但我們需要的則是 Slider 控件的 Value 屬性單向傳遞到 BindingSlider 類的 SliderValue 屬性,所以才得使用 TwoWay 方式。

        BindingSlider bindingSlider = new BindingSlider();
        public MainPage()
        {
            this.InitializeComponent();
            slider1.DataContext = bindingSlider;
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            textBlock.Text = bindingSlider.SliderValue.ToString();
        }

首先實(shí)例化 BindingSlider 類,再在后臺(tái)代碼中獎(jiǎng) bindingSlider 對(duì)象綁定到 slider1 的數(shù)據(jù)上下文。最后通過 Click 事件來將 bindingSlider 對(duì)象的 SliderValue 屬性傳遞給 textBlock 控件的 Text 屬性。

這里的效果就是,拖動(dòng) Slider 但是 TextBlock 不會(huì)有變化,而需要 Button 來不斷的更改 TextBlock 的 Text。如果想要 TextBlock 的 Text 能夠根據(jù) Slider 實(shí)時(shí)的更改,這就需要”更改通知“了。

Silder 綁定到 TextBlock,使用更改通知

既然要使用通知更改的技術(shù),那就可以在 XAML 代碼中將 Button 控件刪除掉了,包括后臺(tái)代碼中的 Click 事件。

緊接著來修改 BindingSlider 類,首先得使用 INotifyPropertyChanged 接口。這個(gè)接口有 PropertyChanged 事件,而這個(gè)事件則會(huì)告知綁定目標(biāo)綁定源已經(jīng)發(fā)生修改,這樣綁定目標(biāo)也會(huì)實(shí)時(shí)的進(jìn)行更改。在新的 set 中,我們將 SliderValue 值傳遞到 NotifyPropertyChanged 中。

    public class BindingSlider :INotifyPropertyChanged
    {
        private int sliderValue;
        public int SliderValue
        {
            get
            {
                return sliderValue;
            }
            set
            {
                sliderValue = value;
                NotifyPropertyChanged("SliderValue");     
            }
        }                                                                           
        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }

最后我們還需要將 bindingSlider 對(duì)象綁定到 textBlock 的數(shù)據(jù)上下文。

        BindingSlider bindingSlider = new BindingSlider();
        public MainPage()
        {
            this.InitializeComponent();
            slider1.DataContext = bindingSlider;
            textBlock.DataContext = bindingSlider;           
        }

這樣一來就全部更改完成了,試試就會(huì)發(fā)現(xiàn) TextBlock 的 Text 會(huì)根據(jù) Slider 的拖動(dòng)而實(shí)時(shí)修改了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)