我有一个应用程序,它使用两个滑块来生成代码中其他地方使用的产品.我想要的是将产品价值绑定到文本框或工具提示,例如,看起来像“10 x 15 = 150”.
第一部分很容易,看起来像这样:
<TextBlock.Text> <MultiBinding StringFormat="{}{0} x {1}"> <Binding ElementName="amount_slider" Path="Value" /> <Binding ElementName="frequency_slider" Path="Value"/> </MultiBinding> </TextBlock.Text>
但是,什么是一个很好的方法来获得产品在那里呢?
public class MultiplyFormulaStringConverter : IMultiValueConverter { public object Convert(object[] values,Type targetType,object parameter,CultureInfo culture) { var doubleValues = values.Cast<double>().ToArray(); double x = doubleValues[0]; double y = doubleValues[1]; var leftPart = x.ToString() + " x " + y.ToString(); var rightPart = (x * y).ToString(); var result = string.Format("{0} = {1}",leftPart,rightPart); return result; } public object[] ConvertBack(object value,Type[] targetTypes,CultureInfo culture) { throw new NotImplementedException(); } }
和重要的
<Window.Resources> <local:MultiplyFormulaStringConverter x:Key="MultiplyFormulaStringConverter"/> </Window.Resources>
谢谢!
解决方法
而不是使用StringFormat创建一个转换器.这样的东西
public class MultiplyFormulaStringConverter : IMultiValueConverter { public object Convert(object[] values,CultureInfo culture) { var doubleValues = values.Cast<double>().ToArray(); var leftPart = string.Join(" x ",doubleValues); var rightPart = doubleValues.Sum().ToString(); var result = string.Format("{0} = {1}",rightPart); return result; } public object[] ConvertBack(object value,CultureInfo culture) { throw new NotImplementedException(); } }
<TextBlock.Text> <MultiBinding Converter="{StaticResource MultiplyFormulaStringConverter}"> <Binding ElementName="amount_slider" Path="Value" /> <Binding ElementName="frequency_slider" Path="Value"/> </MultiBinding> </TextBlock.Text>