public class Game {
public Player Player1 {
get { return gameSettings.Player1; }
}
}
public class Player : INotifyPropertyChanged {
public int TotalScores {
get { return moves.Sum(move => move.ComposableWord.Length); }
}
public void AddMove(Move move) {
if (move == null)
throw new ArgumentNullException("move", "Move can not be null.");
moves.Add(move);
OnPropertyChanged("TotalScores");
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) {
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
По мнениюПочему привязка не работает?
<StackPanel DataContext="{Binding Path=Game.Player1}">
<TextBlock Text="{Binding TotalScores}"/>
</StackPanel>
DataContext в View установлен на GameBoardPageViewModel по Caliburn.
public class GameBoardPageViewModel {
public Game Game {
get { return game; }
}
}
Я вижу в отладчике, что когда AddMove вызывается, там никто не слушает события PropertyChanged (AddMove вызывается гораздо позже, чем View и ViewModel построения, так переплеты должны быть установлены на тот момент) ,
Обновление 1. Если я вызываю уведомление об имуществе игры, то обязывающие работы. В чем причина такого поведения?
Уверены, что добавленная длина свойства Move 'ComposableWord' больше 0? – nemesv
Да. Абсолютно. Все работает нормально. Если я вызываю уведомление в свойстве Game, то привязка работает. – EngineerSpock
Когда задана 'игра'? Доступен ли он во время привязки? Поскольку вы не уведомляете его, он должен быть доступен в этом месте, иначе он не будет работать. – dkozl