Я разрабатываю игру, которая хочет проверить, решена ли определенная головоломка или нет. Эта головоломка находится внутри UserControl, и если она будет решена, я хочу показать другой UserControl.
Метод изменения одного UserControl1 на UserControl2 находится внутри MainWindowViewModel, и я смог решить эту проблему с помощью этой команды :
Button 1:
<Button Content="Grid" Command="{Binding DataContext.NavigateCommand, RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}, Mode=OneWay}" CommandParameter="5" />
Лог c должен передать Puzzle как переменную и позволить второму UserControl проверить, решена ли головоломка, но с учетом того, как эта команда закодирована в MainViewModel, что не т возможно. MainViewModel выглядит так:
public class MainViewModel : ViewModelBase, INotifyPropertyChanged
{
private IPage content;
public IPage Content { get => content; protected set => Set(ref content, value); }
public RelayCommand<int> NavigateCommand => new RelayCommand<int>(Navigate);
private readonly Dictionary<int, Lazy<IPage>> pages = new Dictionary<int, Lazy<IPage>>
{
[1] = new Lazy<IPage>(() => new IntroViewModel()),
[2] = new Lazy<IPage>(() => new ChoosePuzzleViewModel()),
[3] = new Lazy<IPage>(() => new GameViewModel(5)),
[4] = new Lazy<IPage>(() => new GameViewModel(7)),
[5] = new Lazy<IPage>(() => new GameViewModel(9)),
[6] = new Lazy<IPage>(() => new ResultViewModel())
};
public MainViewModel() => Navigate(1);
public void Navigate(int value) => Content = pages[value].Value;
}
Итак, решение, которое я пытаюсь применить, - позволить PuzzleViewModel проверять правильность головоломки с помощью кнопки, вот так:
Button 2:
<Button Name="SolveButton" Content="Check" Height="80" Width="100" Command="{Binding VMPuzzle.SolvedCheck}" />
И в зависимости от результата, возвращаемого этой командой, запустите команду Button 1 . Необязательно, чтобы вторая команда была в кнопке, это для целей иллюстрации.
Итак, вопрос в том, может ли одна кнопка запускать две команды, одну за другой?