MultiBinding Convert Back功能

use*_*229 1 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}"/>
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)

有示例代码的任何想法.谢谢您的帮助 !

Lui*_*ipe 6

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

有时候一个人不能进行双向转换,因此没有实现这个ConvertBack方法,这意味着你只有单向绑定.

如果你可以转换它,那么你应该实现它.我无法真正看到你的Convert输出有多可能.

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

有关示例实现,请查看此处