为什么绑定不起作用?

时间:2014-01-19 17:09:10

标签: wpf data-binding caliburn

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属性的通知,则绑定有效。这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

  

如果我在Game属性上调用通知,则绑定工作

由于您没有为PropertyChanged属性引发Game事件,因此它必须在绑定时可用,否则绑定机制将无法创建链接。