我有三个TextBox
es:WBC_txt
,NE_txt
和result_txt
。
我想用绑定来执行此操作:
(WBC_txt.text * NE_txt.text) * 10
并在result_txt.Text
显示结果。
我尝试过ElementName
和Path
方式,但它不起作用,因为它只提供一个值。
使用XAML进行此操作的最佳方法是什么?
答案 0 :(得分:4)
创建三个属性是Viewmodel,两个属性通过数据绑定表示WBC_txt
和NE_txt
的内容,第三个属性返回计算结果:
private double _wbc;
public double Wbc
{
get { return _wbc; }
set
{
if (value != _wbc)
{
_wbc = value;
NotifyPropertyChanged("Wbc");
NotifyPropertyChanged("Result");
}
}
}
private double _ne;
public double Ne
{
get { return _ne; }
set
{
if (value != _ne)
{
_ne = value;
NotifyPropertyChanged("Ne");
NotifyPropertyChanged("Result");
}
}
}
public double Result
{
get { return Wbc * Ne * 10; }
}
然后将第三个属性Result
绑定到result_txt文本框!
答案 1 :(得分:2)
在ViewModel中放置显式属性Result的另一个选择是制作Multiconverter
如果您没有在ViewModel中的任何其他地方引用结果,这可能是最好的方法,因为它将允许您重复使用此数学运算&不用担心结果的属性正在更新。
这看起来像
<强> XAML 强>
<TextBox x:Name="Result">
<TextBox.Text>
// OneWay binding necessary in this case otherwise it will
// try calling ConvertBack which is NotSupported
<Multibinding Converter="{StaticResource WPCandNEtoResultConverter}" Mode="OneWay">
<Binding Path="Wbc">
<Binding Path="Ne">
</Multibinding>
</TextBox.Text>
</TextBox>
C#IMultiValueConverter
public class WPCandNEtoResultConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, CultureInfo culture)
{
var wbc = values[0];
var ne = values[1];
return return wbc * ne * 10;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}