Я работаю с древовидной структурой с использованием WPF и шаблона MVVM. Я начинаю с создания 20 корневых узлов и ленивой загрузки дочерних узлов при каждом щелчке каждого узла. Так например ... если у меня есть следующее:Могу ли я подавить вызов «CanExecute» в шаблоне MVVM
Level 1
Level 1.1
Level 2
Level 3
Level 3.1
Level 3.2
Уровни 1, 2 и 3 загружаются во время выполнения. Уровни 1.1, 3.1 и 3.2 не будут загружены до тех пор, пока их соответствующие родители не будут нажаты. Уровни ниже 1.1 и т. Д. Загружаются одинаково, нажимая на их родителя.
Моя проблема - когда я нажимаю на уровень 1.1 для загрузки своих детей, метод «CanExecute» проверяется для уровня 1.1 и всех элементов корневого уровня для каждого ребенка уровня 1.1. Это вызывает немало времени впустую, если есть множество детей.
Мой вопрос: могу ли я как-то подавить звонок на «CanExecute»? Мне не нужно называть это как эти под-уровни, и я хотел бы обойти его. Я очень новичок в структуре MVVM, поэтому я не уверен, что это возможно.
К сожалению, мы не используем Призма. Мы используем инфраструктуру Unity. Я должен был уточнить, что в моем вопросе. –
Вам не нужно использовать Prism для использования DelegateCommand. Вы можете просто вытащить его из исходного кода или любой другой реализации DelegateCommand в interwebs. Это ОЧЕНЬ простой класс. Это, как говорится, недостаточно для решения вашей «проблемы». Это связано с тем, что «CanExecute» вызывается WPF независимо от события CanExecuteChanged. Я поставил «проблему» в кавычки, потому что задаю вопрос, действительно ли это проблема. Если ваша реализация CanExecute быстрая и малая (это должно быть), это не имеет значения. Какую проблему вы пытаетесь решить, подавив вызов в CanExecute? –
Брайан прав в том, что вам не нужно использовать Prism для использования DelegateCommand. Но вытаскивание вещей из библиотеки и использование везде, где вы хотите, почти всегда являются проблемой поддержания. Сказанное я принимаю мое утверждение, что вам придется всегда явно вызывать RaiseCanExecuteChanged для вызываемого CanExecute, как неверного. Приложение для призмы структурировано таким образом, что это происходит, но не обязательно всегда верно. – NVM