У меня есть 24 кнопки, которые отправляют команды открытия/закрытия процессору, с которым я общаюсь.
Код: Выделить всё
// Card1 open channel
OpenCard1Channel1Command = new RelayCommand( OpenCardChannel( 0, 1 ) );
OpenCard1Channel2Command = new RelayCommand( OpenCardChannel( 0, 2 ) );
OpenCard1Channel3Command = new RelayCommand( OpenCardChannel( 0, 3 ) );
OpenCard1Channel4Command = new RelayCommand( OpenCardChannel( 0, 4 ) );
OpenCard1Channel5Command = new RelayCommand( OpenCardChannel( 0, 5 ) );
OpenCard1Channel6Command = new RelayCommand( OpenCardChannel( 0, 6 ) );
OpenCard1Channel7Command = new RelayCommand( OpenCardChannel( 0, 7 ) );
OpenCard1Channel8Command = new RelayCommand( OpenCardChannel( 0, 8 ) );
// Card2 open channel
OpenCard2Channel1Command = new RelayCommand( OpenCardChannel( 1, 1 ) );
OpenCard2Channel2Command = new RelayCommand( OpenCardChannel( 1, 2 ) );
OpenCard2Channel3Command = new RelayCommand( OpenCardChannel( 1, 3 ) );
OpenCard2Channel4Command = new RelayCommand( OpenCardChannel( 1, 4 ) );
OpenCard2Channel5Command = new RelayCommand( OpenCardChannel( 1, 5 ) );
OpenCard2Channel6Command = new RelayCommand( OpenCardChannel( 1, 6 ) );
OpenCard2Channel7Command = new RelayCommand( OpenCardChannel( 1, 7 ) );
OpenCard2Channel8Command = new RelayCommand( OpenCardChannel( 1, 8 ) );
// Card3 open channel
OpenCard3Channel1Command = new RelayCommand( OpenCardChannel( 2, 1 ) );
OpenCard3Channel2Command = new RelayCommand( OpenCardChannel( 2, 2 ) );
OpenCard3Channel3Command = new RelayCommand( OpenCardChannel( 2, 3 ) );
OpenCard3Channel4Command = new RelayCommand( OpenCardChannel( 2, 4 ) );
OpenCard3Channel5Command = new RelayCommand( OpenCardChannel( 2, 5 ) );
OpenCard3Channel6Command = new RelayCommand( OpenCardChannel( 2, 6 ) );
OpenCard3Channel7Command = new RelayCommand( OpenCardChannel( 2, 7 ) );
OpenCard3Channel8Command = new RelayCommand( OpenCardChannel( 2, 8 ) );
Код: Выделить всё
public ICommand OpenCard1Channel1Command
{
get; set;
}
Код: Выделить всё
public Action OpenCardChannel (int cardIndex, int channelIndex)
{
if ( cardIndex == 0 )
{
if ( buttonStates0 [channelIndex - 1] == Brushes.DarkRed )
{
return () =>
{
Trace.WriteLine( $"0.card channel {channelIndex} with current condition DarkRed" );
ChangeButtonState( 0, channelIndex - 1, Brushes.LimeGreen );
scModel.SendChannelOpenRequest( cardIndex, channelIndex );
};
}
else if ( buttonStates0 [channelIndex - 1] == Brushes.LimeGreen )
{
return () =>
{
Trace.WriteLine( $"0.card channel {channelIndex} with current condition LimeGreen" );
ChangeButtonState( 0, channelIndex - 1, Brushes.DarkRed );
scModel.SendChannelCloseRequest( cardIndex, channelIndex );
};
}
}
Код: Выделить всё
private void ChangeButtonState ( int cardIndex, int channelIndex, Brush brushToBeApplied)
{
switch ( cardIndex )
{
case 0:
ButtonStates0 [channelIndex] = brushToBeApplied;
break;
case 1:
buttonStates1 [channelIndex] = brushToBeApplied;
break;
case 2:
buttonStates2 [channelIndex] = brushToBeApplied;
break;
default:
break;
}
}
Я пытаюсь отправить данные, которые изменяются по отношению к состоянию кнопки, например, если на этом канале нет активной связи, он будет отображаться красным, и при нажатии на него будет отправлено открытое сообщение. Аналогично, если у него уже есть активное сообщение, оно будет отображаться зеленым, и при нажатии на него будет отправлено сообщение о закрытии.
Я могу изменить фон для первого щелчка, но после этого мой код не работает так, как я хочу. Чего мне не хватает и как я могу реализовать эти кнопки, не копируя тот же код. Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/787 ... py-pasting