WPF笔记

尽量不要试图通过UI层去拿数据或者操作数据,而是直接去操作数据源。例如:

  想对一个TreeView里的结点排序,不应该是对TreeViewItem排序,而是应该对TreeView的DataSource排序

  TreeView的Item是CheckBox,想把这些CheckBox认为选中,不应该从UI下手,而是把与CheckBox相关联的数据设为true

你可以把Form也看成是一个容器控件。我们说的动态添加控件也就是向容器控件内添加控件了——方法就是先声明一个与控件类型相对应的变量、为它创建一个控件类型的实例、把这个实例初始化好之后再调用Contols.Add方法,把这个变量添加进容器控件就好了。看起来大概是这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private void button1_Click(object sender, EventArgs e)    
{    
    Button button = new Button();    
    button.Size = new Size(80, 20);    
    button.Text = "OK";    
    groupBox1.Controls.Add(button);    
}  
XAML是WPF技术中专门用于设计UI的语言。

Binding.UpdateSourceTrigger 属性

获取或设置一个值,该值确定绑定源更新的执行时间。

命名空间:    System.Windows.Data
程序集:    PresentationFramework (在 PresentationFramework.dll 中)
XAML 的 XMLNS:  http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

public UpdateSourceTrigger UpdateSourceTrigger { get; set; }
<object UpdateSourceTrigger="UpdateSourceTrigger" .../>
属性值
类型: System.Windows.Data.UpdateSourceTrigger
UpdateSourceTrigger 值之一。  默认值为 Default,它返回目标依赖项属性的默认 UpdateSourceTrigger 值。  但是,多数依赖项属性的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus 
确定依赖项属性的默认 UpdateSourceTrigger 值的编程方法是使用 GetMetadata 来获取属性的属性元数据,然后检查 DefaultUpdateSourceTrigger 属性的值。

TwoWay 或 OneWayToSource 绑定侦听目标属性的更改,并将这些更改传播回源。 这称为更新源。 通常,只要目标属性进行了更改,就会进行这些更新。 这对于复选框和其他简单控件很有用,但不适用于文本字段。 每次键击之后进行更新都会降低性能,用户也得不到通常在提交新值之前使用退格键修改键入错误的机会。 因此,Text 属性的默认 UpdateSourceTrigger 值是 LostFocus,而不是 PropertyChanged

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

本主题描述如何使用 UpdateSourceTrigger 属性控制绑定源更新的执行时间。 本主题使用 TextBox 控件作为示例。

TextBox .Text 属性的默认 UpdateSourceTrigger 值为 LostFocus 这意味着如果应用程序的 TextBox 包含数据绑定 TextBox.Text 属性,则直到 TextBox 失去焦点(例如,将鼠标移到 TextBox 外单击时),键入到 TextBox 中的文本才能更新源。

如果希望在键入过程中更新源,请将该绑定的 UpdateSourceTrigger 设置为 PropertyChanged 在下面的示例中,TextBox 和 TextBlock 的 Text 属性都绑定到同一源属性。 将 TextBox 绑定的 UpdateSourceTrigger 属性设置为 PropertyChanged

<Label>Enter a Name:</Label>
<TextBox>
  <TextBox.Text>
    <Binding Source="{StaticResource myDataSource}" Path="Name"
             UpdateSourceTrigger="PropertyChanged"/>
  </TextBox.Text>
</TextBox>

<Label>The name you entered:</Label>
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>


因此,TextBlock 所显示的文本将与用户输入到 TextBox 中的文本相同(因为源发生更改),如该示例的以下屏幕快照所示:

简单数据绑定示例屏幕快照

如果您具有一个对话框或用户可编辑的窗体,并且希望将源更新延迟到用户完成字段编辑并单击“确定”之后,则可以将绑定的 UpdateSourceTrigger 值设置为 Explicit,如下面的示例所示:

<TextBox Name="itemNameTextBox"
         Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />


如果将 UpdateSourceTrigger 值设置为 Explicit,则仅当应用程序调用 UpdateSource 方法时,该源值才会发生更改。 下面的示例演示如何为 itemNameTextBox 调用 UpdateSource

C#
VB
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();


说明说明

此方法可用于其他控件的属性,但请记住,其他大多数属性的默认 UpdateSourceTrigger 值为 PropertyChanged 有关更多信息,请参见 UpdateSourceTrigger 属性页。

说明说明

UpdateSourceTrigger 属性用于处理源更新,因此仅适用于 TwoWay 或 OneWayToSource 绑定。 若要使 TwoWay 和 OneWayToSource 绑定生效,源对象需要提供属性更改通知。 有关更多信息,可以参见本主题中引用的示例。 此外,也可以参见如何:实现属性更改通知

.NET Framework
受以下版本支持:4.5、4、3.5、3.0
.NET Framework Client Profile
受以下版本支持:4、3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

并不是.NET Framework 对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见 .NET Framework 系统要求.




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值