WPF数据绑定模式

绑定元素更新不一致的问题

 

数据绑定的一个特性是目标会被自动更新,而不考虑源的修改方式.当点击change to 20按钮时,会运行一下代码:

public void btn_change_20(object sender, RoutedEventArgs e)
{
    text_size.FontSize = 20;
}

上面的代码直接设置了文本框的字体尺寸,因此,滑动条的位置未相应的更新,更糟的是,上面的代码破坏了字体尺寸绑定,并用字面值代替了绑定,如果现在移动滑动条上的滑块,文本块根本不会相应的进行改变.

 

使用双向绑定

 

有趣的是,可采用一种方式强制在两个方向传递数值,从源到目标以及从目标到源,技巧是设置Binding对象的Mode属性,改成双向绑定.该绑定允许为源或目标应用变化,并使整体的其他部分自动更新自身

<TextBlock Name="text_size" Grid.Row="1" FontSize="{Binding ElementName=slider_1,Path=Value,Mode=TwoWay}">abcdefg</TextBlock>

 

绑定模式

 

当设置Binding.Mode属性时,WPF允许使用5个System.Windows.Data.BindingMode枚举值中的任何一个

 

OneWay 当源属性变化时,更新目标属性

TwoWay 当源属性变化时,并且当目标属性变化时更新源属性

OneTime 最初根据源属性设置目标属性,然而,其后的所有改变都会被忽略

OneWayToSource 与OneWay类似,但方向相反,当目标属性变化时更新源属性

Default 此类绑定依赖目标属性,既可以是双向的,也可以是单向的,除非明确置顶了另一种模式,否则所有绑定都使用该方法.