2012-09-10 5 views
1
안녕하세요 나는 예외 "변환을 다음 줄에 내 IMultiValueConverter

WPF VB.NET IMultiValueConverter 및

Public Function Convert(ByVal values() As Object, _ 
        ByVal targetType As System.Type, _ 
        ByVal parameter As Object, _ 
        ByVal culture As System.Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert 
    If Not IsDBNull(values(0).ToString) And AndAlso Not IsDBNull(values(1).ToString) Then 
     If CDbl((values(1))) > 0 Then 

      Select Case CInt(Fix(values(0))) 
       Case 1 
        Return New LinearGradientBrush(Color.FromArgb(My.Settings.r1rowcolor.A, My.Settings.r1rowcolor.R, My.Settings.r1rowcolor.G, My.Settings.r1rowcolor.B), Color.FromArgb(My.Settings.r1rowendcolor.A, My.Settings.r1rowendcolor.R, My.Settings.r1rowendcolor.G, My.Settings.r1rowendcolor.B), My.Settings.r1angle) 
       Case 2 
        Return New LinearGradientBrush(Color.FromArgb(My.Settings.r2rowcolor.A, My.Settings.r2rowcolor.R, My.Settings.r2rowcolor.G, My.Settings.r2rowcolor.B), Color.FromArgb(My.Settings.r2rowendcolor.A, My.Settings.r2rowendcolor.R, My.Settings.r2rowendcolor.G, My.Settings.r2rowendcolor.B), My.Settings.r2angle) 
       Case 3 
        Return New LinearGradientBrush(Color.FromArgb(My.Settings.r3rowcolor.A, My.Settings.r3rowcolor.R, My.Settings.r3rowcolor.G, My.Settings.r3rowcolor.B), Color.FromArgb(My.Settings.r3rowendcolor.A, My.Settings.r3rowendcolor.R, My.Settings.r3rowendcolor.G, My.Settings.r3rowendcolor.B), My.Settings.r3angle) 
       Case Is > 3 
        Return New LinearGradientBrush(Color.FromArgb(My.Settings.rm3rowcolor.A, My.Settings.rm3rowcolor.R, My.Settings.rm3rowcolor.G, My.Settings.rm3rowcolor.B), Color.FromArgb(My.Settings.rm3rowendcolor.A, My.Settings.rm3rowendcolor.R, My.Settings.rm3rowendcolor.G, My.Settings.rm3rowendcolor.B), My.Settings.r4angle) 
      End Select 

     ElseIf CDbl((values(1))) < 0 Then 
      Return New LinearGradientBrush(Color.FromArgb(My.Settings.minpricesprice.A, My.Settings.minpricesprice.R, My.Settings.minpricesprice.G, My.Settings.minpricesprice.B), Color.FromArgb(My.Settings.minpricesprice.A, My.Settings.minpricesprice.R, My.Settings.minpricesprice.G, My.Settings.rm3rowendcolor.B), My.Settings.minpricespriceangle) 
     End If 
    End If 
End Function 

에 다음 함수를 얻을 수있다

"변환 더블을 입력하는 유형 'NamedObject'에서 '유효하지 않습니다 " 유형 'NamedObject'에서이 DBNULLS 확인에 실패 할 수

If CDbl((values(1))) > 0 Then 

그래서 난이 예외가 발생할 수 있습니다 궁금해 "하지 유효 '더블을 입력합니다? 변환기가 다중 바인딩없이 작동하는지 확인하십시오.

또는 2 개의 값 중 하나는 정수이고 하나는 2라는 값을 전달할 수 있습니까?

답변

2

CollectionViewNewItemPlaceholderNamedObject이므로 ItemPlaceholder이 변환기로 전달됩니다.

+0

합리적으로 다음과 같은 형식을 제공합니다. 'Number'인수는 'MS.Internal.NamedObject'이며 숫자가 아닙니다. – user1570048

+0

하지만'MsgBox (values ​​(0) .ToString)' 'MsgBox (values ​​(1) .ToString)'을 추가하면 올바른 값인 것으로 알 수 있습니다 – user1570048

+0

@ user1570048 :'ToString'은 기본 유형 전혀, 객체는 임시 데이터를 매우 잘 포함하고 ToString을 통해 보여줄 수 있습니다. –