Недавно начал изучать MVVM и пока от него больше проблем. А то что называют слабой связанностью - для меня скорее "Слабо отслеживаемое поведение". Использую Prism.wpf. Создал DelegateCommand. В CanExecute указал bool переменную модели. При каждом изменение переменной вызываю RaisePropertyChanged(). Но кнопка на которой висит команда не реагирует на изменения. Что еще следует указывать, что бы СanExecute вызывался при каждом изменение переменой модели?
DelegateCommand в качестве CanExecute принимает функцию, которая проверяет некоторое условие и возвращает bool-значение, показывающее, может ли команда выполниться в данный момент. Вот простой пример:
string text;
public string Text
{
get => text;
set
{
if (Set(ref text, value))
OK.RaiseCanExecuteChanged();
}
}
public DelegateCommand OK { get; }
public MainVm()
{
OK = new DelegateCommand(_ => MessageBox.Show(Text),
_ => !string.IsNullOrEmpty(Text));
}
я не использую Prism, поэтому мои реализации могут отличаться, но принцип вы должны понять
Т.е. при каждом изменении Text мы говорим команде проверить возможность запуска, команда вызывает метод, который у нее есть: _ => !string.IsNullOrEmpty(Text) и получает от него результат.
В итоге:
<StackPanel>
<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="OK" Command="{Binding OK}"/>
</StackPanel>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости