织梦怎么做的网站,零食网页制作素材,楚雄网站建设rewlkj,元气森林的网络营销方式C# WPF编程-元素绑定 将元素绑定到一起绑定表达式绑定错误绑定模式代码创建绑定移除绑定使用代码检索绑定多绑定绑定更新绑定延时 数据绑定是一种关系#xff0c;该关系告诉WPF从源对象提取一下信息#xff0c;并用这些信息设置目标对象的属性。目标属性始终是依赖项属性该关系告诉WPF从源对象提取一下信息并用这些信息设置目标对象的属性。目标属性始终是依赖项属性通常位于WPF元素中WPF数据绑定的最终目标是在用户界面中显示一下信息。
将元素绑定到一起
数据绑定的最简单情形是源对象是WPF元素而且源属性是依赖项属性。依赖项属性具有内置的更改通知支持。当源对象中改变属性值时会立即更新目标对象中的绑定属性。
简单示例通过Slider控制TextBlock文本字体大小 StackPanelSlider x:NamesliderFontSize Margin3 Minimum1 Maximum40 Value10TickFrequency1 TickPlacementTopLeft/SliderTextBlock x:NametextBlock Margin10 Text简单文本内容FontSize{Binding ElementNamesliderFontSize, PathValue}/TextBlock/StackPanel绑定表达式
数据绑定表达式使用XAML标记扩展。因为正在创建System.Windows.Data.Binding类的一个实例所以绑定表达式以单词Binding开头。至少需要设置两个属性ElementName属性指示源元素和Path属性指示源元素中的属性。如果希望引用附加属性在另一个类中定义但应用于绑定元素的属性需要再圆括号中封装属性名称。如绑定到Grid控件中的某个元素路径Grid.Row将检索放置元素的行号。
绑定错误
WPF不会引发异常来通知与数据绑定相关的问题。如果指定元素或属性不存在那么不会收到任何指示
绑定模式
数据绑定的一个特性是目标会被自动更新而不考虑源的修改方式。
BindingMode枚举值
名称说明OneWay当源属性变化时更新目标属性TwoWay当源属性变化时更新目标属性并且当目标属性变化时更新源属性OneTime最初根据源属性值设置目标属性。OneWayToSource与OnWay类型类似但方向相反。当目标属性变化时更新源属性。Default此类绑定依赖于目标属性。既可以是双向的也可以是单向的。除非明确指定了另一种模式否则所有绑定都使用该方法 示例双向绑定模式
StackPanelSlider x:NamesliderFontSize Margin3 Width500 Minimum1 Maximum40 Value10TickFrequency1 TickPlacementTopLeft/SliderTextBlock x:NametextBlock Margin10 Text简单文本内容FontSize{Binding ElementNamesliderFontSize, PathValue, ModeTwoWay}/TextBlockButton x:NamesmallBtn Margin10 Width100 ClicksmallBtn_Click小字体/ButtonButton x:NamelargeBtn Margin10 Width100 ClicklargeBtn_Click大字体/Button
/StackPanelprivate void smallBtn_Click(object sender, RoutedEventArgs e)
{textBlock.FontSize 15;
}private void largeBtn_Click(object sender, RoutedEventArgs e)
{textBlock.FontSize 30;
}代码创建绑定
在构建窗口时在XAML标记中使用Binding标记扩展来声明绑定表达式通常最高效。但也可以使用代码来创建绑定
示例代码创建绑定
Binding binding new Binding();
binding.Source sliderFontSize;
binding.Path new PropertyPath(Value);
binding.Mode BindingMode.TwoWay;
blockText.SetBinding(TextBlock.FontSize, binding);移除绑定
可以通过代码使用BindingOperation类的两个静态方法移除绑定。
ClearBinding()方法使用依赖项属性的引用作为参数删除指定的数据绑定ClearAllBinding()方法为元素删除所有数据绑定
BindingOperation.ClearAllBinding(blockText);
需要使用代码绑定的一些特殊情况
创建动态绑定删除绑定
使用代码检索绑定
可使用代码检索绑定并检查其属性而不必考虑绑定最初是用代码还是标记创建的。 获取绑定信息的两种方式
使用静态方法BindingOperations.GetBinding()来检索相应的Binding对象。需要提供两个参数绑定元素以及具有绑定表达式的属性。
TextBlock x:NametextBlock Margin10 Text简单文本内容FontSize{Binding ElementNamesliderFontSize, PathValue/TextBlockBinding binding BindingOperations.GetBinding(textBlock, TextBlock.FontSize);一旦获取到绑定对象就可以检查其属性。如
Binding.ElementName:绑定元素名Binding.Path绑定值BindingMode绑定模式
通过调用BindingOperations.GetBindingExpression()方法获得更实用的BindingExpression对象 BindingExpression expression BindingOperations.GetBingdingExpression(textBlock, TextBlock.FontSize); // 获取源元素Slider boundObj (Slider)expression.ResolvedSource;string boundData boundObj.FontSize;多绑定
可以绑定元素的多个属性。
示例绑定了 TextBlock元素的 FontSizeText 和 Foreground三个属性
StackPanel Width500Slider x:NamesliderFontSize Minimum10 Maximum40 Value20/SliderTextBox x:NametextInput请输入内容/TextBoxListBox x:NamelistboxColor SelectedIndex0ListBoxItem ForegroundRedRed/ListBoxItemListBoxItem ForegroundGreenGreen/ListBoxItemListBoxItem ForegroundBlueBlue/ListBoxItem/ListBoxTextBlock x:NametextShow Margin5FontSize{Binding ElementNamesliderFontSize, PathValue}Text{Binding ElementNametextInput, PathText}Foreground{Binding ElementNamelistboxColor, PathSelectedItem.Foreground}/TextBlock
/StackPanel绑定更新
绑定数据的更新行为由Binding.UpdateSourceTrigger属性控制枚举值有
名称说明PropertyChanged当目标属性发生变化时立即更新源LostFocus当目标属性发生变化并且目标丢失焦点时更新源Explicit除非调用BindingExpression.UpdateSource()方法否则无法更新源Default更加目标属性的元素数据确定更新行为
例如添加了UpdateSourceTriggerPropertyChanged
TextBlock x:NametextFontSizeText{Binding ElementNametextInput, PathText, ModeTwoWay, UpdateSourceTriggerPropertyChanged}/TextBlock绑定延时
下极少数情况下需要防止数据绑定触发操作和修改源对象至少需要延迟一段时间。这种情况可以使用Binding对象的Delay属性。等待数毫秒之后再提交更改。
例如添加了Delay500
TextBlock x:NametextFontSizeText{Binding ElementNametextInput, PathText, ModeTwoWay, UpdateSourceTriggerPropertyChanged,Delay500}/TextBlock