2014-10-08 5 views
0

Я искал здесь несколько раз и нашел кучу примеров, но, похоже, не может заставить ничего работать.Связывание данных с одноточечным классом

У меня есть решение, в котором ViewModel ссылается на класс MainViewModel через локатор. Основной класс модели основного вида:

public NotifyLog Log 
    { 
     get { return LogMgr.Instance.Log; } 
    } 

В нем. Это позволяет мне указать:

<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay}" /> 

В NotifyLog определяется как:

public class NotifyLog : INotifyPropertyChanged 
{ 
    public NotifyLog() 
    { 
     _Log = new StringBuilder(); 
    } 

    private void OnPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private StringBuilder _Log; 

    public void Append(String Value) 
    { 
     _Log.Append(Value); 
     OnPropertyChanged("Text"); 
    } 

    public string Text 
    { 
     get { return _Log.ToString(); } 
    } 

    public override string ToString() 
    { 
     return this.Text; 
    } 
} 

Для первоначального запуска приложения, текстовое поле заполняется, но, то OnPropertyChanged обработчик никогда автоматически заселенных поэтому никаких изменений не обнаружено. Я делаю что-то неправильно, я просто не знаю, что ...

Спасибо за ваше время, BLD

ответ

1

, если вы хотите обновить журнал при вводе текста в текстовом поле необходимо изменить режим привязки к TwoWay. также событие запускается при выходе из текстового поля, а не на каждом символе.

Если вы хотите обновить текстовое поле при изменении журнала, вам нужно добавить установщик в свойство Text и поднять событие NotifyPropertyChanged (в установщике).

также проверить выходные данные программы на предмет некоторых ошибок привязки.

1

К линии:

<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay}" /> 

Попробуйте добавить "UpdatedSourceTrigger" вот так:

<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
Смежные вопросы