可以在鼠标点击事件中读取我的类,但不能修改它,为什么?

时间:2014-11-13 09:22:11

标签: c# wpf user-interface binding

我有一些问题,我只能在Mainwindow()方法中更新我的gui。并且无法弄清楚为什么它在一个事件中不起作用来改变gui。我也使用绑定和viewmodel类。

因此,当我走出主窗口时,似乎我的绑定停止工作了?

任何想法都可能出错?

谢谢!

public partial class MainWindow : Window
{


    public ObservableCollection<ChessPiece> ItemX { get; set; }

    public MainWindow()
    {
       ItemX = new ObservableCollection<Chess>();

       InitializeComponent();
       DataContext = ItemX ;
       ItemX.Add(new Chess() { PosX = 0, PosY = 0, Type_ = Piece.Farmer, Player_ = PiecePlayer.Black });
       ItemX.Add(new Chess() { PosX = 0, PosY = 1, Type_ = Piece.Farmer, Player_ = Player.Black });


  ItemX.ElementAt(1).PosX = 5; //This works perfect, my GUI changes! 
}      

 public void ChessBoardClick(object sender, MouseButtonEventArgs e)
    {
       ItemX.ElementAt(0).PosX = 3; //Wont work, but the values inside ItemX changes. 


    }

1 个答案:

答案 0 :(得分:1)

目前您的GUI不会更改,因为正确启动 ...您没有MainWindow方法,你有一个MainWindow构造函数。 UI只会在构造函数完成后完成更新,到时PosX已经为5。

要让您的UI对属性更改做出反应,您的Chess类需要实现INotifyPropertyChanged,以便在更改PosX属性时触发事件。

作为旁注,使用集合的索引器比使用ElementAt方法更为惯用,例如

ItemX[0].PosX = 3;