2012-07-21 4 views
2

다른 방법으로 TextBox 내용을 다른 클래스의 속성에 바인딩하는 데 문제가 있습니다. stackoverflow 검색 팁/솔루션을 많이 준 있지만 아무 것도 작동하는 것. 내 XAML 코드에서TextBox.Text ViewModel의 속성에 바인딩

내가 가진 :

< TextBox ... Width="336" IsReadOnly="True" 
Text="{Binding Path=AssignedClearProgram, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

함께 CS 코드에서

(I가 아닌 모든 중요한 항목을 제거 ...) 내가 가진이 다음에

public CombiWindow(Combi combi) 
{ 
    ViewModel = new CombiViewModel(combi); 
    DataContext = ViewModel; 
} 

CombiViewModel :

[UsedImplicitly] 
    public string AssignedClearProgram { get; set; } 

AssignedClearProgram을 처음으로 할당 할 때, 텍스트 상자는 내가 설정 한 텍스트로 채워지는 것처럼 보이지만, 윈도우가 표시되고 AssignedClearProgram이 코드에서 업데이트되면 (즉, set 메소드가 호출 될 때), 데이터는 화면에서 갱신되지 않습니다.

누구나이 변수가 변경되면 텍스트 상자를 업데이트하는 솔루션이 있습니까?

종류와 관련,

미셸

+0

왜 바인딩 모드가 두 개입니까? 보기에서 입력이 없다고 생각했을 것입니다. – pgee70

+0

아마 단방향 바인딩은 괜찮을 것입니다 (하지만 질문에 대한 대답은 중요하지 않습니다). –

답변

5

귀하의 ViewModel 클래스에서 INotifyPropertyChanged를 구현해야하고 당신이 속성을 변경할 때마다 해당 인터페이스의 이벤트를 마련 할 필요가있다. 그러면 바인딩이 변경되어 텍스트 상자가 업데이트됩니다.

+0

고마워, 이미 INotifyPropertyChanged를 사용하고 있다는 것을 잊어 버렸지 만, set 메소드에서 OnPropertyChanged 호출을 추가하는 것을 잊었다. 고마워요! –

+1

가장 좋은 방법은 속성 세터에 넣고 이벤트를 발생시키기 전에 값이 실제로 변경되었는지 확인하는 것입니다. – BlackWasp

2

보기 모델 클래스는 INotifyPropertyChanged 인터페이스를 구현해야합니다.

귀하의 속성은 다음과 같습니다

private string assignedClearProgram; 

public string AssignedClearProgram 
{ 
    get { return assignedClearProgram; } 
    set 
    { 
     if (assignedClearProgram != value) 
     { 
      assignedClearProgram = value; 

      // Notify property has changed here using PropertyChanged event from INotifyPropertyChanged. 
     } 
    } 
} 

읽기 this 기사를 INotifyPropertyChanged 인터페이스를 구현하고 PropertyChanged 이벤트를 활용하는 방법의 예를 들어.

+0

고마워요. 그러나 나는 정말로 그것을 작동 시켰습니다. btw, 실제로 OnPropertyChanged 이벤트를 명시 적으로 호출해야합니다. // Notify ... 행 대신 여기를 의미하는지 알 수는 없지만 링크의 경우 +1입니다. –

+0

예, 그랬습니다. 어떻게 구현했는지를 알고 의견을 남겼습니다. – Bernard

관련 문제