WPF 关于Binding

        命名空间:System.Windows.Data

        作用:提供对绑定定义的高级访问,该绑定连接绑定目标对象(通常为 WPF 元素)的属性和任何数据源(例如数据库、XML 文件,或包含数据的任何对象)。在WPF中被封装成一个类,其相当于数据的桥梁,两端分别是Binding的源和目标。

**************************************************************************************************************

以下基本WPF数据绑定概念。

        每个绑定通常都具有以下四个组件: 绑定目标对象、 目标属性、 绑定源,和一个Path到要使用的绑定源中的值。 例如,如果你想要的内容绑定TextBox到 Student 对象的 Name 属性,您的目标对象是TextBox,目标属性是Text属性,要使用的值是名称,并且源对象是学生对象。

 <TextBlock Text="{Binding Student.Name}"/>

        目标属性必须为依赖属性。 这也意味着您不能将字段绑定。 大多数属性UIElement对象是依赖项属性,大多数依赖项属性,除了只读属性,默认情况下支持数据绑定。 (仅DependencyObject类型可以定义依赖关系属性和所有UIElement对象派生自DependencyObject。)

        注意,绑定源对象并不限于自定义 CLR 对象。 WPF 数据绑定支持 CLR 对象和 XML 形式的数据。 若要提供一些示例,绑定源可以是UIElement,任何列表对象、CLR与关联的对象ADO.NET数据或 Web 服务或 XmlNode 包含你XML数据。

        使用Mode属性来指定数据流的方向。 若要检测源更改中单向或双向绑定,源必须实现一种合适的属性更改通知机制如INotifyPropertyChanged。

**************************************************************************************************************

常用字段
        Converter     获取或设置要使用的转换器。

        Mode(Default、OneTime、OneWay、OneWayToSource、TwoWay)     获取或设置一个值,该值指示绑定的数据流方向。

        NotifyOnSourceUpdated     获取或设置一个值,该值指示当值从绑定目标传输到绑定源时是否引发 SourceUpdated 事件。

        NotifyOnTargetUpdated     获取或设置一个值,该值指示当值从绑定源传输到绑定目标时是否引发 TargetUpdated 事件。

        Path     获取或设置绑定源属性的路径。

       RelativeSource     通过指定绑定源相对于绑定目标位置的位置,获取或设置此绑定源。

        Source     获取或设置要用作绑定源的对象。

        StringFormat     获取或设置一个字符串,该字符串指定如果绑定值显示为字符串,应如何设置该绑定的格式。

<TextBlock Text="{Binding NowTime, StringFormat=yyyy-MM-dd HH:mm:ss}"/>

**************************************************************************************************************

        下面来看一个简单示例

下面的示例使用StringFormat属性来转换Price,即Double,为一个字符串,表示一种货币。
<ListView ItemsSource="{StaticResource MyData}">
  <ListView.View>
    <GridView>
      <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"/>
      <GridViewColumn DisplayMemberBinding="{Binding Path=Price, StringFormat=Now {0:c}!}"/>
    </GridView>
  </ListView.View>
</ListView>

下面的示例使用StringFormat上的属性MultiBinding生成一个字符串,包含Description并Price中每一项ListBox。
<ListBox ItemsSource="{StaticResource MyData}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock>
        <TextBlock.Text>
          <MultiBinding  StringFormat="{}{0} -- Now only {1:C}!">
            <Binding Path="Description"/>
            <Binding Path="Price"/>
          </MultiBinding>
        </TextBlock.Text>
      </TextBlock>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

<DataGrid ItemsSource="{Binding DisplayMessageList}">
   <DataGrid.Columns>
		<DataGridTemplateColumn Width="40">
			<DataGridTemplateColumn.Header>
				<TextBlock  Text="序号"/>
			</DataGridTemplateColumn.Header>
			<DataGridTemplateColumn.CellTemplate>
				<DataTemplate>
					<Grid MinWidth="40">
						<TextBlock Text="{Binding Index}"/>
					</Grid>
				</DataTemplate>
			</DataGridTemplateColumn.CellTemplate>
		</DataGridTemplateColumn>
	</DataGrid.Columns>
</DataGrid>

**************************************************************************************************************
        UpdateSourceTrigger     获取或设置一个值,它可确定绑定源更新的计时。绑定TwoWay或OneWayToSource侦听目标属性中的更改并将其传播回源。 这称为更新源。 通常,只要目标属性发生更改,可能发生这些更新。 这是相当不错的复选框和其他简单控件,但它不是通常适用于文本字段。 正在更新后每次击键可能导致性能降低,拒绝用户对常用机会退格删除,并在提交新值之前修改键入错误。 因此,默认值UpdateSourceTrigger的值Text属性是LostFocus而不PropertyChanged。

        如果您设置UpdateSourceTrigger值设为Explicit,则必须调用UpdateSource方法或所做的更改将不会传播回源。

        Default: 绑定目标属性的默认 UpdateSourceTrigger 值。 大多数依赖属性的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus。

        Explicit:仅在调用 UpdateSource() 方法时更新绑定源。

        LostFocus:每当绑定目标元素失去焦点时,都会更新绑定源。

        PropertyChanged:每当绑定目标属性发生更改时,都会更新绑定源。

**************************************************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值