powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
6 сообщений из 6, страница 1 из 1
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36948051
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Есть форма, DataContext которой - объект ViewModel. Одно из свойств этого объекта - экземпляр ICommand - привязано к кнопке, расположенной на форме. Когда ViewModel становится равным NULL, кнопка, к которой привязана команда ViewModel, должна стать недоступной. Как это реализовать декларативно?

Учебник читал, но триггеры работать не хотят.

На всякий случай прилагаю простой проект на VS2010. Кто-то может сказать, как для него в виде триггеров реализовать приведенные ниже условия?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
if(btAssignViewModel.DataContext != null) 
    btAssignViewModel.IsEnabled = false;
else
    btAssignViewModel.IsEnabled = false;
----------------------------------------
if(btRemoveViewModel.DataContext == null) 
    btRemoveViewModel.IsEnabled = false;
else
    btRemoveViewModel.IsEnabled = true;
----------------------------------------
if(ViewModel.Data == null)
    btSetData.IsEnabled = true;
else
    btSetData.IsEnabled = false;
----------------------------------------
if(ViewModel.Data is null) 
    btResetData.IsEnabled = false;
else
    btResetData.IsEnabled = false;
...
Рейтинг: 0 / 0
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36948054
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, прошу прощения, упустил кое что. Вот такие условия:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
if(btAssignViewModel.DataContext != null) 
    btAssignViewModel.IsEnabled = false;
else
    btAssignViewModel.IsEnabled = true;
----------------------------------------
if(btRemoveViewModel.DataContext == null) 
    btRemoveViewModel.IsEnabled = false;
else
    btRemoveViewModel.IsEnabled = true;
----------------------------------------
if(ViewModel.Data == null)
    btSetData.IsEnabled = true;
else
    btSetData.IsEnabled = false;
----------------------------------------
if(ViewModel.Data is null) 
    btResetData.IsEnabled = false;
else
    btResetData.IsEnabled = true;
...
Рейтинг: 0 / 0
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36948421
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Не уверен, что понял полностью нужный функционал. посмотри CompositeCommand с IActiveAware
...
Рейтинг: 0 / 0
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36950461
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, уже разобрался.

На всякий случай раскрою мысль. Есть приложение наподобие броузера - окно с набором вкладок. У каждой страницы есть стек рабочих областей (посещенных страниц), только одна из них является видимой (опять же, как в броузере - вперед-назад в рамках открытой вкладки). Соответственно, модель данных: MainModel содержит коллекцию TabModel, каждый элемент которой - коллекцию PageModel. Активной вкладке соответствует MainModel.CurrentTab, активной странице - TabModel.CurrentPage.

Чтобы перезагрузить содержимое текущей страницы, вызывается команда PageModel.ReloadCommand. Соответственно, в главном окне имеется панель кнопок с привязками вида:
Код: plaintext
1.
<Button Content="Reload" Command="{Binding Path=CurrentTab.CurrentPage.ReloadCommand}"
Если текущая вкладка пустая (нет рабочих областей), то CurrentTab.CurrentPage = null, если нет вкладок вообще, то CurrentTab = null. Задача - сделать так, чтобы в данных условиях кнопка стала неактивной. А то глупо, например, наблюдать в броузере без загруженной страницы кнопку ее обновления.

Вообще для данной конкретной задачи вопрос уже неактуален, она была тестовой. Нов общем и целом - вот так примерно.
Для простой кнопки подошло вот такое дело:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<Button.Style>
    <Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="Command" Value="{x:Null}">
               <Setter Property="IsEnabled" Value="false"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Button.Style>
...
Рейтинг: 0 / 0
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36950633
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
На мой взгляд, активацией кнопки должна заведовать ViewModel, a не в триггер. В общем случае логика может быть сложной и лучше ее не выносить во View.
Как я понял, описана нелинейная навигация. Как ее реализовывал?
...
Рейтинг: 0 / 0
[WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
    #36950671
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Целиком с Вами согласен - почти вся подобная логика вынесена во ViewModel. В данном конкретном случае речь идет о том, что если в некоторой ситуации кнопка ничего не делает - пусть она будет недоступной - роль ViewModel здесь примерно равна 0.

Уточните вопрос про нелинейную навигацию, мне не совсем ясен смысл термина. Если речь идет о структурной навигации с использованием Page/NavigationWindow, то я этим делом не пользовался.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [WPF] Сделать кнопку недоступной, когда связанная с ней команда становится равной NULL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]