首先定義一個簡單的類 BindingSlider,同時在 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。因為在這里 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();
}
首先實例化 BindingSlider 類,再在后臺代碼中獎 bindingSlider 對象綁定到 slider1 的數據上下文。最后通過 Click 事件來將 bindingSlider 對象的 SliderValue 屬性傳遞給 textBlock 控件的 Text 屬性。
這里的效果就是,拖動 Slider 但是 TextBlock 不會有變化,而需要 Button 來不斷的更改 TextBlock 的 Text。如果想要 TextBlock 的 Text 能夠根據 Slider 實時的更改,這就需要”更改通知“了。
既然要使用通知更改的技術,那就可以在 XAML 代碼中將 Button 控件刪除掉了,包括后臺代碼中的 Click 事件。
緊接著來修改 BindingSlider 類,首先得使用 INotifyPropertyChanged 接口。這個接口有 PropertyChanged 事件,而這個事件則會告知綁定目標綁定源已經發(fā)生修改,這樣綁定目標也會實時的進行更改。在新的 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 對象綁定到 textBlock 的數據上下文。
BindingSlider bindingSlider = new BindingSlider();
public MainPage()
{
this.InitializeComponent();
slider1.DataContext = bindingSlider;
textBlock.DataContext = bindingSlider;
}
這樣一來就全部更改完成了,試試就會發(fā)現 TextBlock 的 Text 會根據 Slider 的拖動而實時修改了。
更多建議: