2014-02-06 3 views
1

Проблемы с MultiBinding конвертером
Я знаю, что это не имеет смысла посылать такое же значение дважды
я что изолировать от этого одного связывания
В преобразователе я получаю ошибку на гипсе к BOOL
значениеMultiBinding конвертер Связывание

{DependencyProperty.UnsetValue}

Но "RWnet" является BOOL

<ContentPresenter Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" 
     x:Name="fieldTemplateDetail" 
     Content="{Binding}" 
     ContentTemplateSelector="{StaticResource fieldTemplateSelector}"> 
    <ContentPresenter.Visibility> 
     <MultiBinding Converter="{StaticResource visabilityConverterTwoBool}"> 
      <Binding Path="RWnet" /> 
      <Binding Path="RWnet" /> 
     </MultiBinding> 
    </ContentPresenter.Visibility> 
</ContentPresenter> 

public class VisabilityConverterTwoBool : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values == null) return Visibility.Visible; 
     if (values.Length != 2) return Visibility.Visible; 
     try 
     { 
      if ((bool)values[0] == false) return Visibility.Collapsed; 
      if ((bool)values[1] == false) return Visibility.Collapsed; 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.Message, "VisabilityConverterTwoBool"); 
      Debug.WriteLine(values[0].ToString()); 
      Debug.WriteLine(values[1].ToString()); 
     } 
     return Visibility.Visible; 
    } 

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

Если я пошлю другую половину фактического Мульти Binding работает (неверный результат, но не ошибка)

<Binding ElementName="cbEditMode" Path="IsChecked" /> 

Но это работает просто отлично
RWnet это логическое значение

<ContentPresenter Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" 
     Visibility="{Binding Path=RWnet, Converter={StaticResource bvc}}" 
     x:Name="fieldTemplateDetail" 
     Content="{Binding}" 
     ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/> 

<BooleanToVisibilityConverter x:Key="bvc" /> 

для McGarnagle это контекст данных

<ListBox Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" x:Name="lbCurDocFields" 
      ItemsSource="{Binding Source={StaticResource curDocFields}}" LostFocus="lbCurDocFields_LostFocus" 

ответ

1

В зависимости от того, как вы подключаетесь к контексту данных, нет гарантии, что привязка будет готова, когда вы этого ожидаете. Полностью проверьте вводы, он должен исправить проблему:

if (values.Length != 2 && values[0] as bool? == null || values[1] as bool? == null) 
    return Visibility.Visible; 
+0

Но у этого есть контекст данных. См. Пример того, что работает внизу. ContentPresenter отображает другие свойства из одной и той же привязки. Я опубликую привязку ItemsSource. – Paparazzi

+0

@Blam отображает свойства, но вы уверены, что он не отображал «неустановленное значение», во-первых, за долю секунды до того, как был применен DataContext? – McGarnagle

+0

Несмотря на то, что я не понял вашего ответа, я подключил его, и это, казалось, сработало. +1 на данный момент. Если я не могу сломать, я дам ему чек. – Paparazzi