WPF, почему мой Binding обновляется только из MainWindow? - PullRequest
3 голосов
/ 18 апреля 2011

Почему view.aBOX обновляет только TextBoxA из MainWindow?и как мне это исправить?

Когда я передаю view на w, он работает отлично.Даже отладчик показывает, что view.aBOX обновляется сообщением в w.Однако он никогда не обновляет TextBoxA из w.

Пример кода:

//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}" />

1 Ответ

4 голосов
/ 18 апреля 2011

Вам необходимо реализовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...