Как рассчитать значение в WPF Binding - PullRequest
9 голосов
/ 20 февраля 2011

У меня есть приложение, которое использует два ползунка для создания продукта, используемого в другом месте кода. Мне бы хотелось, чтобы значение продукта было привязано к текстовому блоку или всплывающей подсказке, например, чтобы оно выглядело как «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, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

И самое главное

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

Спасибо!

Ответы [ 2 ]

14 голосов
/ 20 февраля 2011

Вместо использования 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>
3 голосов
/ 20 февраля 2011

Вы можете использовать конвертер и передать в качестве параметра два значения, которые вы хотите вычислить.Преобразователь выполнит вычисление и вернет строковый результат.

(пример преобразователя здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...