我的问题如下。多重绑定。如何将正确的值更新为源?
我有3个文本框绑定到数据集中的3个字段。 TextBox_Rate,TextBox_Hours,TextBox_Salary。
我所需要的是为TextBox_Rate + TextBox_Hours为= TextBox_Salary。
我发现这可以通过使用多重绑定和转换器来实现。
的Multibinding如下所示:
<TextBox FontSize="14.667" HorizontalAlignment="Right" HorizontalContentAlignment="Right" Style="{StaticResource TextBoxStyle}">
<TextBox.Text>
<MultiBinding Converter="{StaticResource SalaryConverter}" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" ValidatesOnExceptions="True" NotifyOnValidationError="True" NotifyOnSourceUpdated="True" StringFormat="C">
<Binding Path="Rate Per Hour"/>
<Binding Path="Hours Per Month"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
和转换器:
Public Class SalaryConverter
Implements IMultiValueConverter
Dim weeklyHours As Double = 0
Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
Dim salary As Decimal = 0
If values(0).Equals(System.Windows.DependencyProperty.UnsetValue) Or values(1).Equals(System.Windows.DependencyProperty.UnsetValue) Then
Return salary
Else
salary = (Math.Round(values(0) * (values(1) * 4)))
weeklyHours = values(1)
Return salary
End If
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetTypes() As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
Dim testVal As Decimal = CType((value.ToString.Replace("R ", "").Replace(",", "")/weeklyHours), Decimal)/4
Return New Object() {testVal}
End Function
末级
所有这一切工作的100%。我得到我想要的结果。但是,这也是问题所在进来......
TextBox_Rate势必集字段率,TextBox_Hours势必集字段小时,最初(在multibinding前)TextBox_Salary被绑定到数据集字段工资但是您必须绑定到TextBox_Rate AND TextBox_Hours。由于不绑定该字段,因此从多重绑定生成的值不会更新回源字段“薪水”。
如何设置绑定来更新该字段?
在此先感谢。
你在用什么语言?我相信这是VB.NET ....也许你应该相应地添加标签。 – froeschli 2011-02-17 07:17:43
添加了其他标签。 – GaaTY 2011-02-17 08:56:00