WPF中UpdateSourceTrigger的使用

UpdateSourceTrigger有三个枚举,

第一个是Explicit,源不会更新除非你手动来操作。正因为这个原因,我在这个TextBox旁边添加了一个按钮,用于手动更新源。在后台代码中,我们看到点击事件处理方法里面只有两行代码,第一行获取目标控件的绑定,第二行调用UpdateSource()方法。

第二是LostFocus,对于Text绑定来说其实就是一个默认值。也就是说一旦目标控件失去焦点,源就会被更新。

第三是PropertyChanged,一旦绑定的属性值改变,源会立即更新。本例中文本改变就产生这种效果。

绑定的UpdateSourceTrigger属性用来控制改变的值何时传递给源。

例如下边这个代码,如果不指定,checkbox的值不会传到后台。

  <DataGrid.Columns>
                        <DataGridTemplateColumn Width="1.2*">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox IsChecked="{Binding 
                                              IsCheck,Mode=TwoWay,     
                                             UpdateSourceTrigger=PropertyChanged}"> 
                                    </CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTextColumn Header="编号" Binding="{Binding Num}" Width="1*"/>
                        <DataGridTextColumn Header="项目名称" Binding="{Binding NAME}" Width="6*"/>
                       
</DataGrid.Columns>

另外也可以正对checkbox定义事件

<DataGridTemplateColumn
                                    Width="10*"
                                    MinWidth="60"
                                    Header="操作"  >
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox Style="{StaticResource CheckBoxStyle}" HorizontalAlignment="Center"
                                                 IsChecked="{Binding Ischeck,Mode= TwoWay, UpdateSourceTrigger=PropertyChanged}" >
                                                <i:Interaction.Triggers>
                                                    <i:EventTrigger EventName="Checked">
                                                        <i:InvokeCommandAction Command="{Binding DataContext.CheckStateChangeCmd, 
                                                            RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"                 
                                                           CommandParameter="true"/>
                                                    </i:EventTrigger>
                                                    <i:EventTrigger EventName="Unchecked">
                                                        <i:InvokeCommandAction Command="{Binding DataContext.CheckStateChangeCmd,
                                                            RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"                 
                                                           CommandParameter="false"/>
                                                    </i:EventTrigger>
                                                </i:Interaction.Triggers>
                                            </CheckBox>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哦里 哦里哦里给

你的鼓支持是我分享的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值