MultiBinding Convert Back功能

时间:2014-01-30 17:04:08

标签: c# wpf xaml

我正在尝试转换某些单位。转换函数如何使用以下内容。 得到以下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 ?????

     }

}

包含示例代码的任何想法。谢谢你的帮助!

1 个答案:

答案 0 :(得分:6)

您的ConvertBack方法需要从字符串转换为数组,其中第一项是MyObject,第二项是bool

有时一个无法进行双向转换,因此不会实现ConvertBack方法,这意味着您只有单向绑定。

如果你可以转换它,那么你应该实现它。 我无法确定您Convert输出的可能性。

我怎么知道这个转换后的字符串现在是非度量系统的度量标准?

对于示例实现,请查看here