我的問題如下。多重綁定。如何將正確的值更新爲源?
我有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