【问题标题】:How to calculate a value in WPF Binding如何计算 WPF 绑定中的值
【发布时间】:2011-06-30 18:34:32
【问题描述】:

我有一个应用程序,它使用两个滑块来生成代码中其他地方使用的产品。我想要将产品值绑定到文本块或工具提示,例如,看起来像“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>

但是还有什么简单的方法可以将产品也放入其中?

使用 Pavlo Glazkov 的解决方案,我将其修改为如下所示:

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, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

还有最重要的

<Window.Resources>
    <local:MultiplyFormulaStringConverter x:Key="MultiplyFormulaStringConverter"/>
</Window.Resources>

谢谢!

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    您可以使用转换器并将要计算的两个值作为参数传递。转换器会进行计算,然后返回字符串结果。

    (转换器示例here

    【讨论】:

      【解决方案2】:

      而不是使用StringFormat 创建一个转换器。像这样的:

      public class MultiplyFormulaStringConverter : IMultiValueConverter
      {
          public object Convert(object[] values, Type targetType, object parameter, 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}", leftPart, rightPart);
      
              return result;
          }
      
          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, 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>
      

      【讨论】:

      • 这与我需要的非常接近 :) 我将其修改为:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2021-11-23
      • 2011-06-04
      相关资源
      最近更新 更多