2014-01-30 3 views
1

Я пытаюсь преобразовать некоторые единицы. Как должна работать функция конвертирования со следующим. Получил следующий XAML. Тег установлен на уникальный объект в моей модели ViewModel.MultiBinding Convert Back function

<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

Я не уверен, что вы можете восстановить два объекта, что ваш мульти-преобразователь на общих если вы удаляете информацию о единице измерения от преобразованного значения. Как вы ожидаете, что это сработает? –

ответ

5

Методы ConvertBack необходимо преобразовать из строки в массив, где первый элемент является MyObject, а второй - bool.

Иногда один не может иметь двухстороннее преобразование а и, следовательно, не реализует ConvertBack метода означает, что вы едите только один способ-привязки.

Если вы можете конвертировать его, тогда вы должны его реализовать. Я не могу понять, как это возможно с выходом Convert.

Как я могу сказать, что эта преобразованная строка теперь находится в метрической неметрической системе?

Для примера реализации выглядит here

+0

Вы поняли это и сделали это? Если вы согласитесь с этим ответом –