Zajmuję się tworzeniem aplikacji w WPF przy użyciu MVVM, ale utknąłem z obiektami ICommand.Jak włączyć przycisk za pomocą metody CanExecute?
Mam okna, które zawiera kilka przycisków, więc wiążę je do ich ICommand w XAML jak poniżej:
<Button Command="{Binding DoSomethingCommand}" Content="Do Something" />
Następnie w mojej klasie view-modelu Pisałem następujące:
public class MyViewModel : ObservableObject
{
private bool isDoSomethingButtonEnabled = false;
....
public ICommand DoSomethingCommand
{
get;
private set;
}
....
....
public MyViewModel()
{
DoSomethingCommand = new DelegateCommand<String>(this.OnDoSomething, this.CanDoSomething);
}
private void OnDoSomething(String arg)
{
}
private bool CanDoSomething(String arg)
{
return isDoSomethingButtonEnabled;
}
....
}
Ponieważ potrzebuję, aby mój przycisk nie był włączony przy pierwszym otwarciu okna, ustawiam zmienną isDoSomethingButtonEnabled
na false
. I to działa, przycisk jest wyłączony na początku, ale moim problemem jest to, że gdy zmienię zmienną isDoSomethingButtonEnabled
na true
w czasie wykonywania, mój przycisk jest nadal wyłączony.
Wykonałem nawet kilka testów po zmianie zmiennej isDoSomethingButtonEnabled
na true
, wydrukowaniu wyniku DoSomethingCommand.CanExecute()
i wyświetleniu "true"!
Co powinienem zrobić, aby włączyć mój przycisk?
góry dziękuję
MVVM jest wzorcem, nie wymaga żadnych konkretnych klas jak DelegateCommand. Czy korzystasz z PRISM? –
Tak, jestem. Właściwie to muszę go użyć – Dante