2009-08-25 3 views
1

텍스트 상자가있는 사용자 정의 컨트롤이 있습니다. UserControl에서 같은 이름의 DependencyProperty를 구현하여 texbox의 Text 속성을 노출하려고했습니다. 따라서 :바인딩에서 사용자 정의 컨트롤의 속성을 변환 할 때 잘못된 캐스트 예외가 발생했습니다.

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
           typeof(string), 
           typeof(UserControlWithTextBox), 
           new UIPropertyMetadata(string.Empty)); 
    public string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set 
     { 
      SetValue(TextProperty, value); 
      textBox.Text = value; 
     } 
    } 

내 응용 프로그램에서 get 부분이 정상적으로 작동하는 것 같습니다. 그러나 두 UserControls 'Text 속성을 빈 문자열이 있는지 확인합니다 변환기를 사용하여 이러한 UserControls 중 두 Text 속성을 단추의 IsEnabled 속성을 바인딩 할했습니다. 응용 프로그램 창이로드 될 때 다음과 같은 오류가 발생합니다.

System.InvalidCastException 처리되지 않았습니다. 메시지 = "MS.Internal.NamedObject 형식의 개체를 System.String 형식으로 변환 할 수 없습니다."

은 변환 방법에 따라서 보이는 : 예외가 발생 될 때

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (string) values[0] != string.Empty && 
       (string) values[1] != string.Empty; 
    } 

값 [0] 및 값 [1]이 모두 값 DependencyProperty.UnsetValue있다.

어디로 잘못 갔습니까? 당신이 명시 적으로 캐스팅 할 때

답변

1

당신의 예외에 의해 판단 값 [0]값 [1]은 문자열 그래서 중단되지 않습니다.

이러한 유형의 문제를 방지하려면 실제로 텍스트 상자를 공용 속성에 바인딩 한 다음 바인딩 된 속성을 확인하여 텍스트 상자가 비어 있는지 확인하는 다른 공용 속성에 IsEnabled 단추를 바인딩해야합니다.

+0

감사합니다. 문제는 내가 생각했던 것보다 훨씬 간단했다. UserControl 인스턴스 자체의 이름을 변경 한 후 ElementName = "MyUserControlInstance"라는 이름을 바꾸는 것을 잊었습니다 ... – Dabblernl

+0

가끔은 그게 당신을 미치게 만드는 작은 것들 ... 오, 누가 그 모든 시간을 장난입니다. :) –

관련 문제