none
Расчёт полей внутри коллекции RRS feed

  • Вопрос

  • Добрый день.

    Что есть WPF C# коллекция привязанная к ListView -> DataTemplate

    есть в коллекции поле double Money

    Это поле привязано к TextBox

    Смысл такой что например в коллекции и заодно и в ListView 4 Item -а

    И один из TextBox.Text = {Binding Money, Mode=TwoWay}

    Что это за поле. Это процент каждого Item -а в сумме должно быть 100% например

    Item1 -> TextBox.Text = 10

    Item2 = 40

    Item3 = 20

    Item4 = 30

    Суммарно 100%

    Задача. если ввожу данные в одно из полей. Например Item2-> TextBox.Text = 45

    То необходимо пересчитать остальные поля Money в других Item исходя из процентного соотношения тех цифр к 100%

    таким образом три других значения должны уменьшиться пропорционально на 5 = 45-40

    Формулу для расчёта я сделал, расчёт каждого Item через циклы меняю в коллекции и перепривязываю ListView.ItemsSource = _obs;

    Но есть одна загвоздка. Расчёт не происходит, вылетает ошибка Double.NAN в тот момент когда я ввожу данные в одно из полей.

    проверка if(!Double.IsNAN) проблему не решает. Всё равно когда я делаю вычисления мне необходимо определоить число введённое в поле.

          private void TXTBMoney_SelectionChanged_1(object sender, RoutedEventArgs e)
            {
                TextBox _tx = (TextBox)sender;
                if (!string.IsNullOrEmpty(_tx.Text))
                {
                    raznica = _obsListKomplektsProject[IndexSelect].MoneyPodrazdelProject - prev;
    
                    ObsMoney();
    
                    //if (!Double.IsNaN(Convert.ToDouble(_tx.Text)))
                    //{
                    //    if (Convert.ToDouble(_tx.Text) > 0)
                    //    {
                    //        //raznica = Convert.ToDouble(_tx.Text) - prev;
                    //    }
                    //}
                }
            }


    Делал точку останова или остановки вылетает на строке

    Convert.ToDouble(_tx.Text)

    или если обращаться не к TextBox а к значении в коллекции то всё равно говорит что Double.NaN

    Я так полагаю это из-за привязки. Но необходимо всё таки вычислять значения.

    Значения ввожу точно цифры.

    Спасибо

    11 апреля 2016 г. 9:00

Ответы

  • Использовать TextBox для типа Double не самая лучшая идея.

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

    В частности в моем WPF проекте, где у меня очень похожая с вами схема, я использую Extended.Wpf.Toolkit в составе которого есть контрол DoubleUpDown.

    Там на самом деле много еще чего вкусного, но я использую только этот контрол. Пока не подводил.


    VB.Net - WPF, UWP

    11 апреля 2016 г. 9:56
    Отвечающий