我正在尝试转换一些单位.转换函数如何使用以下内容.得到以下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}"/>
Run Code Online (Sandbox Code Playgroud)
这种风格......
<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>
Run Code Online (Sandbox Code Playgroud)
用这个转换器......
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 ?????
}
}
Run Code Online (Sandbox Code Playgroud)
有示例代码的任何想法.谢谢您的帮助 !
归档时间: |
|
查看次数: |
1894 次 |
最近记录: |