2017-02-12 6 views
0

Я пытаюсь создать простую змеиную игру на C# с помощью WPF. У меня несколько пользовательских элементов управления. В первом пользовательском контроле у ​​меня есть список игроков. Вы выбираете игрока и нажимаете кнопку выбора. После нажатия этой кнопки отображается второй пользовательский элемент управления. Этот пользовательский элемент управления содержит кнопку для запуска змеиной игры.WPF, команда не исполняется

Проблема заключается в том, что все пользовательские элементы управления создаются при запуске приложения, но команда, привязанная к кнопке, которая создает игру змеи после нажатия кнопки выбора. Теперь, если вы нажмете кнопку запуска змеиной игры, команда не будет выполнена. Мой вопрос: должен ли объект команды существовать до создания пользовательского элемента управления или есть способ уведомить пользовательский элемент управления о том, что эта команда была создана?

+0

Нет, нет необходимости создавать его до создания пользовательского элемента управления, однако путь, к которому он привязан, должен уведомлять обо всех наблюдателях, когда он был создан. Если вы добавите еще какой-нибудь код, то у вас может быть более высокий шанс на полноценный ответ :) – Icepickle

ответ

0

вы должны попытаться реализовать интерфейс INotifyPropertyChanged в вашей команде. Он уведомляет об изменении свойств привязанного объекта. Посмотрите here, есть пример свойства «FirstName».

+0

Спасибо, что решил мою проблему :) –

0

Вам нужно вернуть действительную команду, чтобы она существовала, но вы всегда можете ее создать, если она не будет. Например обладают свойством «геттер» убедитесь, что команда существует, прежде чем вернуть его:

private ICommand myThing; 
public ICommand MyThing 
{ 
    get 
    { 
     if (myThing == null) 
     { 
      myThing = new MyCommand(myArgs); 
     } 
     return myThing; 
    } 
} 

В качестве альтернативы, если вы используете C# 6, то вы можете инициализировать команду при объявлении автоматического имущества:

public ICommand MyCommand { get; } = new MyCommand(myArgs);