2011-02-17 42 views
0

我的問題如下。多重綁定。如何將正確的值更新爲源?

我有3個文本框綁定到數據集中的3個字段。 TextBox_RateTextBox_HoursTextBox_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。由於不綁定該字段,因此從多重綁定生成的值不會更新回源字段「薪水」。

如何設置綁定來更新該字段?

在此先感謝。

+0

你在用什麼語言?我相信這是VB.NET ....也許你應該相應地添加標籤。 – froeschli 2011-02-17 07:17:43

+0

添加了其他標籤。 – GaaTY 2011-02-17 08:56:00

回答

0

我的解決方案?

我只是拋棄了更新正確綁定的想法。

就像在轉換器,我需要「薪水」的任何地方,我使用「費率」和「小時」的組合。

似乎工作。

0

您可以添加額外的綁定,例如。綁定到TextBox_Hours(單向),TextBox_Rate(單向)和數據集Salary(雙向或單向源)。然後實現轉換器的ConvertBack方法,爲數據集和Binding.DoNothing提供一個值給兩個文本框。

0

或者,甚至更簡單,將Salary定義爲DataSet的只讀計算屬性。 然後,您可以將TextBoxSalary文本框綁定到此屬性,完全免除您的轉換器,從您的視圖中刪除關聯的業務邏輯。