@Smiz001
C#-developer

Как автоматически пересчитать значения?

Всем доброго вечера.
У меня есть набор TextBox'ов и есть объект Давление. Каждое свойство этого объекта - это вид единицы измерения давления (паскаль, бар и т.д) Все свойства я прибиндил к своему TextBox'у.
Подскажите, как реализовать автоматический пересчет значений во ViewModel? (Я понимаю, что должен реализовать INotifyPropertyChanged)
При этом надо как-то учесть, что пересчет идет по разным формулам (из паскаль в бар одна, паскаль в мм.рт.ст другая).
Может конечно я не прав что создал один объект, а нужно под каждый тип сделать свой объект?
Буду рад получить советы.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
WarFollowsMe
@WarFollowsMe
ViewModel со значением давления
public class PressureViewModel:INotifyPropertyChanged
{
    private double _pressure;

    public double Pressure
    {
        get{return _pressure;}
        set
        {
            _pressure = value;
            SendPropertyChanged("Pressure");
        }
    }

    protected void SendPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}


код конвертера:
public class PaskalToBarConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        // метод преобразования паскаль в бар
        return PaskalToBar((double)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        //метод преобразования бар в паскаль
        return BarToPaskal((double)value);
    }
}


в xaml добавляем ссылку на namespace конвертера:
xmlns:converters="clr-namespace:ConvertersNamespace"


в ресурсах добавляем конвретер:
<Window.Resources>
		<converters:PaskalToBarConverter x:Key="PaskalToBar"/>
</Window.Resources>


ну и в TextBox привязываем давление+конвертер:
<TextBox x:Name="PaskalPressure" Text={Binding Pressure}/>
<TextBox x:Name="BarPressure" Text={Binding Pressure, Converter={StaticResource PaskalToBar}}/>


Тоже самое делаете для мм.р.ст
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Если я правильно понял и есть одна физическая величина , которая отображается в разных единицах - то ivalueconverter
Ответ написан
@russlanddiv
студент
Если я правильно понял вопрос ТС, то есть 3 ТекстБокса: Паскаль, Бар, ММРтути ( числовые значения )
То на KeyUp каждого навесить событие пересчитывающее значения остальных.
Например:
* Нажимаем '1' в Паскаль
* Событие "KeyUp"
* Бар.Текст = функцияПаскальВБар(Паскаль.Текст)
* ММРтути.Текст = функцияПаскальВММРтути(Паскаль.Текст)
Соответственно в мой пример добавить конвертер или парсер в double
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы