2011-03-10 5 views
-1

Я использую wpf + mvvm и пытаюсь реализовать условный конвертер. Вот то, что я делаю в XAML:IMultiValueConverter ConvertBack problem

   <CheckBox.IsChecked> 
        <MultiBinding Converter="{StaticResource pageSourceConverter}"> 
         <Binding Path="CurrentPage.Source"/> 
         <Binding Path="Project.Type1.MachineTypes.Rotating"/> 
         <Binding Path="Project.Type2.MachineTypes.Rotating" /> 
         <Binding Path="Project.Type3.MachineTypes.Rotating" /> 
         <Binding Path="Project.Type4.MachineTypes.Rotating" /> 
        </MultiBinding> 
       </CheckBox.IsChecked> 

И в MultiConverter:

public class PageSourceConverter : IMultiValueConverter 

    { 
     public object Convert(object[] values, Type targetType, object parameter,   CultureInfo culture) 
     { 

      String pageSource = values[0] as String; 

      if (pageSource == "Type1") 
       return values[1]; 
      else if (pageSource == "Type2") 
       return values[2]; 
      else if (pageSource == "Type3") 
       return values[3]; 
      else if (pageSource == "Type4") 
       return values[4]; 
      else 
       return null; 
    } 

    public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

Так что я хочу сделать, это условно связать элемент на странице для разных моделей я имею в viewController на основе типа страницы, на которой пользователь включен.

Что мне нужно сделать для конвертации? Я не знаю, как определить, к какому элементу в возвращаемом массиве принадлежит значение. Есть идеи?

ответ

1

Использование MultiValueConverter для этого выглядит как злоупотребление со мной, вы не используете все входы, вы просто выбрать один, нормальный ValueConverter, который принимает эти 4 объекта как ConverterParameter, вероятно, больше смысла, таким образом, вам не нужно для возврата значений для них в ConvertBack.

Кроме того, логически невозможно ConvertBack. Вы связываетесь с IsChecked, который является логическим/nullable-boolean, давая вам два или три состояния, в то время как ваш вход имеет четыре состояния (разные типы), поэтому ваша функция преобразования отображает от четырех значений до двух или трех. Для этого не может быть обратной функции.

+0

Спасибо за ваш ответ. Это, безусловно, злоупотребление, я понял способ решить мою проблему, которая не использует ValueConverters. У меня был серьезный мозговой пердит! – jeremywho

+2

@jeremywho -1 за то, что вы не делитесь своим решением. – xr280xr