由Flex 3進入Flex 4的必備知識 PART 5 – Flex 4的雙向Data Binding

介绍Flex4中的TwoWayDataBinding特性,简化双TextInput间的双向数据同步过程。

在Flex4中提供了一個比較有趣的功能,
他可以幫助使用者進行雙向的DataBinding這個動作,
在原廠的文件中他稱之為 Two Way Data Binding,
從字面上應該不難理解他的功用,
舉個例子來說,如下圖所示:

flashBuilder-binding

 

我們設計了兩個TextInput的輸入欄位,
當你希望下方的文字輸入欄可以同步顯示上方輸入欄的資料,
那麼你就可以這樣寫:

<s:TextInput id="source"/>
<s:TextInput id="destination" text="{this.source.text}"/>

但是如果你希望下方的輸入欄也能修改時同步回上方的輸入欄中,那麼在Flex3以前必須要寫兩次的DataBinding動作才能完成,而Flex4把這個工作簡化了,如下圖所示: 你若是希望可以完成雙向的資料連結,那你將可以這樣來完成你的工作:

<s:TextInput id="source"/>
<s:TextInput id="destination" text="@{this.source.text}"/>

或是這樣:

<fx:Binding source="this.source.text" destination="this.destination.text" twoWay="true"/>
<s:TextInput id="source"/>
<s:TextInput id="destination"/>

這樣是不是很簡單呢?
這也是從Flex3升級到Flex4上面所需要注意的小地方。

为什么EQUIPMENT PART NAME的grid没有填充下面的页面 而是只填充了一半 <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Grid Grid.Row="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Text="Position Name" Grid.Row="0" Grid.Column="0" Margin="3,3,7,3" Style="{StaticResource LabelTextBlockStyle}"></TextBlock> <controls:MAgCombo Name="cmbPositionName" IsEditable="True" Grid.Column="1" MaskUnexistedInput="True" QueryDataCommand="{Binding Path=QueryEquipmentPartNameListCommand}" IsOptional="True" TargetFilePath="{Binding Path=EquipmentPartNameTargetFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Path=EquipmentPartNameSource,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextEmptyCommand="{Binding Path=EquipmentPartNameTextEmptyCommand}"> <controls:MAgCombo.SelectedText> <Binding Path="EquipmentPartName" Mode="TwoWay" UpdateSourceTrigger="LostFocus"> <Binding.ValidationRules> <m:IUIValidator MethodName="EquipmentPartNameTryValidation"></m:IUIValidator> </Binding.ValidationRules> </Binding> </controls:MAgCombo.SelectedText> </controls:MAgCombo> <TextBlock Text="Equipment Name" Grid.Row="1" Grid.Column="2" Margin="3,3,7,3" Style="{StaticResource LabelTextBlockStyle}"></TextBlock> <controls:MAgCombo Name="cmbEquipmentPartName" IsEditable="True" Grid.Row="1" Grid.Column="3" MaskUnexistedInput="True" QueryDataCommand="{Binding Path=QueryEquipmentPartNameListCommand}" IsOptional="True" TargetFilePath="{Binding Path=EquipmentPartNameTargetFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Path=EquipmentPartNameSource,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextEmptyCommand="{Binding Path=EquipmentPartNameTextEmptyCommand}"> <controls:MAgCombo.SelectedText> <Binding Path="EquipmentPartName" Mode="TwoWay" UpdateSourceTrigger="LostFocus"> <Binding.ValidationRules> <m:IUIValidator MethodName="EquipmentPartNameTryValidation"></m:IUIValidator> </Binding.ValidationRules> </Binding> </controls:MAgCombo.SelectedText> </controls:MAgCombo> <Button Grid.Column="5" Content="QUERY" Width="120" Margin="5,3,3,3" Command="{Binding QueryCommand}"></Button> </Grid> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="auto"></ColumnDefinition> </Grid.ColumnDefinitions> <GroupBox Header="[EQUIPMENT PART NAME]" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="7" Margin="3"> <controls:LocalHeaderDataGrid Margin="0,0,6,6" SelectedItem="{Binding Path=SelectedEquipmentPartListRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectionChangedCommand="{Binding Path=SelectedEquipmentPartChangedCommand}" SelectedIndex="{Binding Path= SelectedEquipmentPartIndex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TargetFilePath="{Binding Path= EquipmentPartTargetFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch" CanUserAddRows="False" ColumnWidth="*" SelectionMode="Single" > </controls:LocalHeaderDataGrid> <!--<controls:LocalHeaderDataGrid Name="dgrdEquipmentPartName" ColumnWidth="*" SelectionMode="Extended" IsReadOnly="True" AutoGenerateColumns="False" CursorIndex="{Binding Path=CursorIndex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Path=EquipmentPartNameInfoList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectionChangedCommand="{Binding Path=SelectedEquipmentPartNameListRowChangedCommand}" TargetFilePath="{Binding Path=EquipmentPartNameTargetFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndexes="{Binding Path= SelectedEquipmentPartNameIndexes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MultiSelectedItems="{Binding Path=SelectedEquipmentPartNameItemsRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=SelectedEquipmentPartNameListRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> --> <!--<controls:LocalHeaderDataGrid.Columns > <DataGridTextColumn Header="PHOTO RESIST NAME" Binding="{Binding EquipmentPartName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="PHOTO RESIST NUMBER" Binding="{Binding EquipmentPartNumber,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="WARNING QTY" Binding="{Binding WarningQty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="VISCOSTY" Binding="{Binding Viscosty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="PRODUCTION FLAG" Binding="{Binding ProductionFlag,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="DEFROST HOUR" Binding="{Binding DefrostHour,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="INSTALLED VALID DAY" Binding="{Binding InstalledValidDay,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </controls:LocalHeaderDataGrid.Columns>--> <!-- </controls:LocalHeaderDataGrid>--> </GroupBox> </Grid> <!-- <Grid Grid.Row="2"> --> <!-- <Grid.ColumnDefinitions> --> <!-- <ColumnDefinition Width="Auto"></ColumnDefinition> --> <!-- <ColumnDefinition Width="*"></ColumnDefinition> --> <!-- <ColumnDefinition Width="Auto"></ColumnDefinition> --> <!-- <ColumnDefinition Width="*"></ColumnDefinition> --> <!-- <ColumnDefinition Width="Auto"></ColumnDefinition> --> <!-- <ColumnDefinition Width="*"></ColumnDefinition> --> <!-- <ColumnDefinition Width="auto"></ColumnDefinition> --> <!-- </Grid.ColumnDefinitions> --> <!-- <GroupBox Header="[STOCK]" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="7" Margin="3"> --> <!-- --> <!-- <controls:LocalHeaderDataGrid Name="dgrdEquipmentPartName" --> <!-- ColumnWidth="*" --> <!-- SelectionMode="Single" --> <!-- IsReadOnly="True" --> <!-- AutoGenerateColumns="False" --> <!-- CursorIndex="{Binding Path=CursorIndex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" --> <!-- ItemsSource="{Binding Path=StockInfoList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" --> <!-- SelectionChangedCommand="{Binding Path=SelectedStockListRowChangedCommand}" --> <!-- TargetFilePath="{Binding Path=StockTargetFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" --> <!-- --> <!-- SelectedIndexes="{Binding Path= StockIndexes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" --> <!-- MultiSelectedItems="{Binding Path=SelectedStockItemsRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" --> <!-- SelectedItem="{Binding Path=SelectedStockListRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> --> <!-- --> <!-- --> <!-- <controls:LocalHeaderDataGrid.Columns > --> <!-- <DataGridTextColumn Header="STATUS" Binding="{Binding Status,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> --> <!-- <DataGridTextColumn Header="COUNT" Binding="{Binding Count,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> --> <!-- </controls:LocalHeaderDataGrid.Columns> --> <!-- --> <!-- </controls:LocalHeaderDataGrid> --> <!-- </GroupBox> --> <!-- </Grid> --> <Grid Grid.Row="3" Grid.ColumnSpan="7"> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="TOTAL COUNT" Margin="3,3,7,3" Style ="{StaticResource LabelTextBlockStyle}"></TextBlock> <TextBlock Style="{StaticResource ValueTextBlockStyle}" Grid.Row="0" Grid.Column="1" Background="LightGray" Text="{Binding Path=TotalCount,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></TextBlock> </Grid> <Grid Grid.Row="4" Grid.ColumnSpan="7"> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Button Grid.Row="0" Content="CREATE" Margin="5,3,3,3" Command="{Binding CreateCommand}" IsEnabled="{Binding Path=IsCreateEnabled, Mode=TwoWay}"></Button> <Button Grid.Row="0" Grid.Column="1" Content="DELETE" Margin="5,3,3,3" Command="{Binding DeleteCommand}" IsEnabled="{Binding Path=IsDeleteEnabled, Mode=TwoWay}"></Button> <Button Grid.Row="0" Grid.Column="2" Content="MODIFY" Margin="5,3,3,3" Command="{Binding ModifyCommand}" IsEnabled="{Binding Path=IsModifyEnabled, Mode=TwoWay}"></Button> </Grid> </Grid>
最新发布
10-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值