Недавно начал изучать 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>
Имеется приложение WPF которое выполняет нехитрые манипуляции, далее возникла необходимость например работы с данными из сторонних источников...
Раньше, наNET Framework MVC 5, я использовал трёхуровневую архитектуру вместе с паттернами Unit Of Work и Репозиторием