Я хотел бы создать форму CF WPF, которая собирает измерения оборудования, но некоторые пользователи предпочитают использовать измерения в футах и дюймах, в то время как другие (младшие) пользователи делают все в метрике.База данных хранит все в метрах, и я решил, что это идеальное место для использования IMultiValueConverter .
Каждая форма имеет DependencyProperty с именем UseImperialMeasurements в котором хранятся пользовательские настройки, и я передаю это значение в функцию Convert вместе с фактическим измерением в метрах.Код до сих пор выглядит следующим образом:
<Label>Length:</Label>
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource DistanceStringConverter}" Mode="TwoWay">
<Binding Path="Length" />
<Binding ElementName="ThisControl" Path="UseImperialMeasurements" />
</MultiBinding>
</TextBox.Text>
</TextBox>
public class DistanceStringConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values.Length != 2 || !(values[0] is Double) || !(values[1] is Boolean)) return "ERROR";
Double measurement = (Double)values[0]; // Always in meters
Boolean useImperial = (Boolean)values[1];
string unit;
if (useImperial == true)
{
double feet, inches;
inches = (measurement * 100) / 2.54;
feet = Math.Floor(inches / 12);
inches = inches % 12;
var replacements = new object[4];
replacements[0] = feet.ToString("#,0");
replacements[1] = "'";
replacements[2] = inches.ToString("0");
replacements[3] = "\"";
// Display like 12'4"
return string.Format("{0}{1}{2}{3}", replacements);
}
else
{
// Display like 5,987.97m
return string.Format("{0}{1}", measurement.ToString("#,0.##"), m);
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
// ToDo: Figure out if imperial or metric measurements are prefered...
}
}
Это хорошо работает для отображения измерений, но брать их в качестве входных данных в метрических или британских единицах было проблематично, поскольку я не могу увидеть связанное значение UseImperialMeasurements свойство в методе ConvertBack .Поэтому я не только не могу угадать, вводит ли пользователь футы или метры, когда не указаны единицы измерения, но у меня нет возможности узнать, какое логическое значение нужно вернуть, чтобы пользовательское предпочтение не изменилось.
Можно ли передать значение UseImperialMeasurements в функцию ConvertBack ?