我正在尝试转换某些单位。转换函数如何使用以下内容。 得到以下XAML。标记在我的ViewModel中设置为唯一对象。
<TextBox Grid.Row="2" Grid.Column="0" Margin="5" HorizontalAlignment="Right" Tag ="{Binding MyObject1}" Style ="{StaticResource TextBoxStyle}"/>
<TextBox Grid.Row="2" Grid.Column="1" Margin="5" HorizontalAlignment="Right" Tag ="{Binding MyObject2}" Style ="{StaticResource TextBoxStyle}"/>
这种风格......
<Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Text">
<Setter.Value>
<MultiBinding Converter="{StaticResource EditUnitsConverterEx}">
<Binding RelativeSource="{RelativeSource Self}" Path="Tag"/>
<Binding Path="IsMetric"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
使用此转换器...
class EditUnitsConverter : IMultiValueConverter
{
MyObject item; //
bool IsMetric; // bool telling me what units the system is in
public object Convert(object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
string sResult = "";
if (values[0] != null && values[1] != null)
{
item = values[0] as MyObject;
IsMetric = (bool)values[1];
sResult = item.Value;
switch (item.Type)
{
case UnitsType.Distance:
case UnitsType.Speed:
if (IsMetric && !item.UnitsAreMetric)
{
double dValue;
double.TryParse(item.Value, out dValue);
dValue = dValue * 25.4;
sResult = dValue.ToString();
}
else if (!IsMetric && item.UnitsAreMetric)
{
double dValue;
double.TryParse(item.Value, out dValue);
dValue = dValue / 25.4;
sResult = dValue.ToString();
}
break;
case UnitsType.Weight:
break;
case UnitsType.Force:
break;
default:
sResult = item.Value;
break;
}
}
return sResult;
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
// throw new NotImplementedException();
// Need to know here what Object/Tag item I am dealing with ?????
}
}
包含示例代码的任何想法。谢谢你的帮助!
答案 0 :(得分:6)
您的ConvertBack
方法需要从字符串转换为数组,其中第一项是MyObject
,第二项是bool
。
有时一个无法进行双向转换,因此不会实现ConvertBack
方法,这意味着您只有单向绑定。
如果你可以转换它,那么你应该实现它。
我无法确定您Convert
输出的可能性。
我怎么知道这个转换后的字符串现在是非度量系统的度量标准?
对于示例实现,请查看here