Может прочитать мой класс внутри события щелчка мыши, но не может его изменить, почему?

У меня есть некоторая проблема, что я могу только обновить свой gui внутри моего метода Mainwindow(). И can not действительно выяснить, почему это не работает внутри события, чтобы изменить gui. Im использует привязки и класс 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. 


 }
</chess></chesspiece>
1 ответ

В настоящее время ваш графический интерфейс не меняется так сильно, как начать правильно... у вас нет метода MainWindow, у вас есть конструктор MainWindow. Пользовательский интерфейс только завершит обновление после завершения этого конструктора, и к этому времени PosX будет уже 5.

Чтобы ваш пользовательский интерфейс реагировал на изменения свойств, вашему классу Chess необходимо будет реализовать INotifyPropertyChanged, так что событие будет запущено при изменении свойства PosX.

В качестве побочного примечания было бы более идиоматично использовать индексатор коллекции, чем метод ElementAt, например

ItemX[0].PosX = 3;

licensed under cc by-sa 3.0 with attribution.