2015-01-20 2 views
1

저는 이와 같은 텍스트 상자를 디자인했습니다. 활성 상태이지만 데이터를 표시하지 않습니다.

<TextBox x:Name="OrderId" 
     Text="{Binding CurrentOrder}"/> 

뷰 모델에서 나는 브레이크 포인트가 모두 세터와 게터 안타 것을 볼 수 있으며, 값은 가되어 값입니다 돌아왔다.

public Order CurrentOrder 
{ 
    get { return _currentOrder; } 
    set 
    { 
    _currentOrder = value; 
    OnPropertyChanged(); 
    } 
} 

그러나 상자에는 아무 것도 표시되지 않습니다. 또한 직접 상자에 숫자를 입력하고 바인딩을 사용하여 소스에서 값을 컨트롤로 다시 업데이트합니다. 그것은 상자를 건조 청소. Like null이 거기에 쓰여졌을 경우 ... 물론 null 값이 순서대로 있는지 확인했습니다.

  1. 내가 뭘 잘못하고 있니?
  2. 문제를 해결하는 방법은 무엇입니까?

물론 단방향, 양방향 모드를 테스트했습니다. 아무 소용이 없습니다. 언제든지 주문 클래스의 등록자에게 알림 메서드 호출을 요청해야합니까? 양방향 모드를 의도하지 않더라도?

답변

1

나는 그것을 해결하는 방법으로 시작합니다 :

  1. 첫째, 다른 어떤 전에, 당신의 출력 창을 확인합니다. 바인딩에 오류가 있음을 나타내는 System.Data 예외가 있습니까?

  2. Snoop과 같은 도구에서 요소를 확인하십시오. 일반적으로 모든 바인딩 오류가 표시됩니다.

  3. 이미 수행 한 작업 중 일부는 수행자가 호출되었는지 확인하십시오. 다음으로 바인딩이 평가되고 있음을 증명하는 게터입니다. 잘못 갈 수 있는지에 관해서는 이제

: 내가 무엇을 볼 수에서

  1. , 당신은 객체에 직접 Text 결합된다. 해당 개체가 ToString()을 무시하지 않으면 정상적으로 예상대로 작동하지 않습니다.

  2. 위에서 문자열을 수동으로 입력하면 매우이 런타임에 혼란 스럽습니다. 문자열을 개체로 변환하는 방법을 알지 못하기 때문입니다.

  3. 변환기를 사용하는 경우 물론 의 중단 점/데이터를 검사하여 코드가 예상대로 작동하는지 확인해야합니다. 당신이 클래스의 재산에 결합하고, 그 재산에 대한 코드 변경이 UI에 전파하려는 경우 편집 할

  4. 는, 그래 그것은 PropertyChagned 인상 요구와 클래스는 INotifyPropertyChanged를 구현해야합니다.

+0

출력 결과가 옳았습니다. 그것이 문제이다. 내가 ** ** ** ToString *을 오버라이드 한 사실로 인해 오도가 생겨서 작동 할 것으로 기대했다. 하지만 항상 발을 차리고있는 것은 아닙니다. 그것은 단지 소스에서 GUI에 이르기 때문에 다른 방법에 대해 걱정할 필요가 없습니다. 그러나 상자의 텍스트를 바인딩 된 순서로 * Id * 속성에 고정시킬 수 있습니까? –

+0

@KonradViltersten'{Binding CurrentOrder.Id}'는 속임수를 써야합니다. 'CurrentOrder'에 대한 변경 만이'Order'가 마지막 포인트 에서처럼 INPC를 구현하지 않는 한 갱신되도록합니다. – BradleyDotNET

+0

나는 * Text = "{Binding CurrentOrder.Id}} *와 같은 것이 필요하다. 그러나 분명히 틀렸다. ... –

관련 문제