2015-05-29 110 views
1

我有3个文本框与我的类绑定(交易)这类似绑定Multibinding文本框在WPF MVVM

<TextBox Text="{Binding Path=Transaction.Bills100,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Name="bills100" Grid.Column="2" Grid.Row="1" Margin="7"></TextBox> 
<TextBox Text="{Binding Path=Transaction.Bill50,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Name="bills50" Grid.Column="2" Grid.Row="2" Margin="7"></TextBox> 
<TextBox Text="{Binding Path=Transaction.Bill20,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Name="bills20" Grid.Column="2" Grid.Row="3" Margin="7"></TextBox> 

而且我还有一个文本框,我已经做了multibinding,做加法第一三个文本框状

<TextBox Grid.Column="2" IsReadOnly="True" Grid.Row="7" Grid.ColumnSpan="2" Margin="7" Name="TotalBills"> 
    <TextBox.Text> 
     <MultiBinding Converter="{ikriv:MathConverter}" ConverterParameter="x+y+z" Mode="TwoWay"> 
      <Binding Path="Text" ElementName="bills100" /> 
      <Binding Path="Text" ElementName="bills50" /> 
      <Binding Path="Text" ElementName="bills20" /> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 

我想这个multibinding文本框绑定我的同班同学(交易)以产权为Transaction.Total像我的第一个三个文本框,但它显示错误

属性文本设置不止一次

+1

*它显示错误* .. 。小心分享那个错误的细节? – Sheridan

+0

您不需要绑定来设置Total属性,在ViewModel中有三个属性:Bills100,Bills50,Bills20,只需在其中一个更改时更新Total。 –

+0

@NovitchiS:我已经显示了3个属性,但是我已经取得了12个属性。但是我的需要是: 我想通过使用我的多重绑定和其通知来绑定Total,我想做一些其他计算。 –

回答

2

其实我们不能得到的双向结合,从价值一个属性,然后设置另一个属性的值。 最后,我用这样的 的解决方案来在我的班级事务

private double _totalBills; 
public double TotalBills 
{ 
    get { return _totalBills; } 
    set { _totalBills= value; Notify("TotalBills"); } 
} 

在XAML(而不是Multibinding的)

<TextBox Text="{Binding Path=Transaction.TotalBills,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" IsReadOnly="True" Grid.Row="7" Grid.ColumnSpan="2" Margin="7" Name="TotalBills"/> 

我的视图模型

public class MainViewModel: INotifyPropertyChanged 
{ 
    private Transaction _transactionDetails; 
    public MainViewModel() 
    { 
     Transaction= new Transaction(); 
     _transactionDetails.PropertyChanged += _transactionDetails_PropertyChanged; 
    } 
    private void _transactionDetails_PropertyChanged(object sender,PropertyChangedEventArgs e) 
    { 
     switch (e.PropertyName) 
     { 
      case "TotalBills": 
       _calculate(); //My method for calculation 
       break; 
     } 
    } 
}