2014-02-06 106 views
1

問題與MultiBinding轉換
我知道這沒有任何意義發送相同值的兩倍
我這樣做,以對單一結合
在轉換器我得到的鑄錯誤爲bool
隔離 值是MultiBinding轉換器綁定

{DependencyProperty.UnsetValue}

但 「RWnet」 是一個布爾

<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 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" /> 

for 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