2011-04-18 87 views
3

爲什麼view.aBOX只從MainWindow內更新TextBoxA?以及如何解決這個問題?WPF,爲什麼我的綁定只從MainWindow更新?

當我通過vieww,它運行得很好。即使調試器顯示view.aBOX正在使用w中的消息進行更新。但是,它不會從w內更新TextBoxA

示例代碼:

//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;設置{OnPropertyChanged(「aBOX」); }}。該修復超過了雙倍我的視圖代碼.. – PiZzL3 2011-04-18 18:40:08

+1

@ PiZzL3 - 還沒有,但你可以[投票](http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/478802-modify-該語言允許爲可觀察適當的?ref =標題)將它添加爲未來的功能。 – CodeNaked 2011-04-18 18:45:47

+0

非常酷!謝謝! – PiZzL3 2011-04-18 18:47:40

-2

您是否嘗試過將VM作爲參考發送?

相關問題