2014-01-19 2 views
0
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. Если я вызываю уведомление об имуществе игры, то обязывающие работы. В чем причина такого поведения?

+0

Уверены, что добавленная длина свойства Move 'ComposableWord' больше 0? – nemesv

+0

Да. Абсолютно. Все работает нормально. Если я вызываю уведомление в свойстве Game, то привязка работает. – EngineerSpock

+1

Когда задана 'игра'? Доступен ли он во время привязки? Поскольку вы не уведомляете его, он должен быть доступен в этом месте, иначе он не будет работать. – dkozl

ответ

1

Если я называю уведомление о собственности игры, то переплетные работы

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

Смежные вопросы