2011-04-18 4 views
3

view.aBOX이 (가) 인 경우에만 MainWindow에서 업데이트합니까? 어떻게 해결할 수 있을까요?WPF, 왜 내 바인딩은 MainWindow에서만 업데이트합니까?

vieww으로 전달하면 완벽하게 실행됩니다. 심지어 디버거도 w의 메시지로 업데이트되는 view.aBOX을 보여줍니다. 그러나 TextBoxAw에서 업데이트되지 않습니다.

예제 코드 :

//MAIN 
public partial class MainWindow : Window 
{ 
    ViewModel view; //DEBUGGER SHOWS aBOX = "Worker STARTED", But no update 
    Worker w; 

    public MainWindow() 
    { 
     this.view = new ViewModel(); 
     this.DataContext = this.view; 

     //TEST 
     this.view.aBOX = "BINDING WORKS!!"; //UPDATES FINE HERE 

     this.w = new Worker(this.view); 
    } 
} 

//VIEW 
public class ViewModel 
{ 
    public string aBOX { get; set; } 
} 

//WORKER 
public class Worker 
{ 
    ViewModel view; 
    public Worker(ViewModel vm) 
    { 
     this.view = vm; 
     this.view.aBOX = "Worker STARTED"; //NEVER SEE THIS IN TextBoxA 
    } 
} 

//XAML/WPF 
<TextBox Name="TextBoxA" Text="{Binding Path=aBOX, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 

답변

4

당신은 변화가 바인딩 엔진에 전파 될 수 있도록 INotifyPropertyChanged를 구현해야합니다. 그것을 사용

public class Notify : INotifyPropertyChanged 
{ 
    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(Expression<Func<object>> exp) 
    { 
     string propertyName = ((exp.Body as UnaryExpression).Operand as MemberExpression).Member.Name; 

     var handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 
} 

: 당신이 기본 클래스를 사용할 수있는 경우

, 당신이 사용할 수

public int Property 
{ 
    //getter 
    set 
    { 
    property = value; 
    RaisePropertyChanged(() => Property); 
    } 
} 

를이 코드를 사용하면 쉽게 속성을 리팩토링과 그렇지 않은 수 마법의 끈을 다뤄야 해. 또한, 당신은 intellisense 얻을.

+0

이렇게했습니다. 감사! 내가 사용할 수있는 자동 자산 변경 거래가 발생하지 않았습니까? 가수 예제 :'public string aBOX {get; set {OnPropertyChanged ("aBOX"); }}'. 픽스는 내 뷰 코드를 두 배 이상으로 만듭니다. – PiZzL3

+1

@ PiZzL3 - 아직은 아니지만 [투표] (http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/478802-modify- 관찰 할 수있는 적절한 "ref = title")을 미래의 기능으로 추가 할 것을 요구합니다. – CodeNaked

+0

정말 멋지다! 감사! – PiZzL3

-2

VM을 참조로 보내 봤습니까?

관련 문제