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>
View的DataContext由Caliburn设置为GameBoardPageViewModel。
public class GameBoardPageViewModel {
public Game Game {
get { return game; }
}
}
我在调试器中看到,当调用AddMove时,没有人监听PropertyChanged事件(AddMove的调用比View和ViewModel构建的要晚得多,因此必须在那时建立绑定)。
更新1。 如果我调用Game属性的通知,则绑定有效。这种行为的原因是什么?
答案 0 :(得分:1)
如果我在Game属性上调用通知,则绑定工作
由于您没有为PropertyChanged
属性引发Game
事件,因此它必须在绑定时可用,否则绑定机制将无法创建链接。