2016-03-23 6 views
0

Hata türünde bir koleksiyona türü 'çoklu-bağlama' örneğini eklenemiyor: yazdığım bir IMultiValueConverter kullanmaya çalışıyorum, ancak IntelliSense bana türündeki 'MultiBinding' örneği eklenemiyor Bu hatayı " veriyor 'DoubleCollection' türünde bir koleksiyona. Sadece 'double' türündeki öğelere izin verilir.'DoubleCollection'

S: Bu hatanın ne anlama geldiğini anlamıyorum. Diğer yollardaki StrokeDashArray özelliklerini değiştirmek için başka dönüştürücüler kullandım; Ancak, bir çoklu bağlantıyı nasıl kullanacağımı bilmiyorum. Birisi neden bu hatayı alıyorum ve bu hatayı nasıl kaldırdığımı açıklayabilir mi?

Ayrıntılar: Dönüştürücü "DashedWhenValue1ArrayEqualsValue2ArrayConverter" olarak adlandırıldı ve yukarıda bir StaticResource olarak tanımladım. İşte

. . . 
public DoubleCollection DoubleCollectionWhenEqual { get; set; } 
public DoubleCollection DoubleCollectionWhenNotEqual { get; set; } 
public DoubleCollection DoubleCollectionWhenValueIsNull { get; set; } 

. . . 

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

    if (values == null || values.Length < 2) 
    { 
    return this.DoubleCollectionWhenValueIsNull; 
    } 

    if (!(values[0] is Array) || !(values[1] is Array)) 
    { 
    return this.DoubleCollectionWhenNotEqual; 
    } 

    object[] array1 = values[0] as object[]; 
    object[] array2 = values[1] as object[]; 

    if (array1.Length != array2.Length) 
    { 
    return this.DoubleCollectionWhenNotEqual; 
    } 

    for (int i = 0; i < array1.Length; i++) 
    { 
    if (array1[i] != array2[i]) 
    { 
     return this.DoubleCollectionWhenNotEqual; 
    } 
    } 

    return this.DoubleCollectionWhenEqual; 

} 
. . . 

ben Visual Studio 2015 içinde hata çoğaltmak mümkün burada görünümü

<Path x:Name="some_Path" Data="M7,4.167 L7,162.08887" HorizontalAlignment="Right" Margin="0,0,-391.5,-871" StrokeStartLineCap="Square" StrokeEndLineCap="Square" Stroke="#FF33CC33" StrokeThickness="10" Width="10.5" RenderTransformOrigin="0,0" Height="167.167" VerticalAlignment="Bottom" > 
     <Path.StrokeDashArray> 
     <MultiBinding Converter="{StaticResource DashedWhenValue1ArrayEqualsValue2ArrayConverter}"> <!-- Error starts here --> 
      <Binding Path="ModelViewProperty1" /> 
      <Binding Path="ModelViewProperty2" /> 
     </MultiBinding> <!-- Error ends here --> 
     </Path.StrokeDashArray> 
    </Path> 
+0

hededo

+1

sadece bir intellisense sorun değil mi ilan edilir veya uygulamanızı çalıştırdığınızda aslında başarısız oluyor satır: Sadece eğlence için, buraya kullanarak Convert yöntemini yazmak için daha sözün yolu LINQ olduğunu ? Visual Studio'yu yeniden başlatırsanız ne olur? – devuxer

cevap

2

benim dönüştürücü kullanmak benim dönüştürücü ilgi çekici parçalarıdır Bir böcek basitçe gibi görünmemektedir XAML düzenleyicisiyle, XAML veya dönüştürücünüzle gerçek bir sorun değil. Uygulamayı çalıştırdığımda, ModelViewProperty1 ve ModelViewProperty2 öğelerinin her ikisinin de değerlere sahip olup olmadığına bağlı olarak farklı görünüyorum. Bu yüzden benim tavsiyem bu özel hatayı görmezden gelmek olurdu.

P.S.

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
{ 
    var arrays = values 
     .OfType<Array>() 
     .Select(x => x.OfType<object>()) 
     .ToList(); 
    if (arrays.Count != 2) return DoubleCollectionWhenValueIsNull; 
    return arrays[0].SequenceEqual(arrays[1]) ? DoubleCollectionWhenEqual : DoubleCollectionWhenNotEqual; 
} 
+1

Hatayı görmezden geleceğim. Dönüştürme ipuçları için teşekkürler! – hededo