Вместо создания обработчика для события click в элементе управления xaml, я хочу, чтобы этот обработчик был внедрен в класс объекта, с которым связан элемент управления. Если это возможно.
Я делаю Game of Life в WPF, у меня есть класс Cell, одним из его свойств является Color, который изменяется при изменении другого свойства State. Состояние может быть либо мертвым, либо живым. В MainWindow.xaml.cs я создаю экземпляр ObservableCollection of Cells. В MainWindow.xaml у меня есть UniformGrid, который связан с ObservableCollection Cells, и когда ячейка меняет свое состояние, ячейка в UniformGrid меняет свой цвет.
Я хочу сделать обработчик для события Click для DataGridCell, и этот обработчик должен быть реализован в классе Cell, чтобы ячейка, связанная с щелкнутым DataGridCell, запускала свой собственный обработчик.
Сотовый класс:
public class Cell : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName){/*...*/}
public void ChangeState(object sender, MouseButtonEventArgs e){/*...*/}
private CellState state;
public CellState State{/*...*/}
private CellState nextState;
public Color Color{/*...*/}
/* Other irrelevant stuff */
}
Я продолжаю получать, что MainWindow не содержит определения 'ChangeState', и я хотел бы как-то обойти его, так как я хочу, чтобы обработчик находился внутри самого класса Cell.
MainWindow.xaml.cs:
public MainWindow()
{
InitializeComponent();
var vm = new ViewModel();
for (int i = 0; i < 100; i++)
{
vm.Cells.Add(new Cell());
DataContext = vm;
}
MainWindow.xaml:
<ItemsControl ItemsSource="{Binding Cells}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="10"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGridCell BorderThickness="0.1" MouseUp="ChangeState">
<DataGridCell.Background>
<SolidColorBrush Color="{Binding Color}"/>
</DataGridCell.Background>
</DataGridCell>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>