RelayCommand's reference is not found
Solution 1
RelayCommand is a class created by MS for handling event or command in WPF. you can create own class or go through below link.
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Solution 2
This does not necessarily have to be RelayCommand
it's simply a name of class from most common example on the web.
The mechanism of ICommand
works in a way that instead of getter or setter being called you get public void Execute(object parameter)
to be called on class that is implementing ICommand
Let me give you an example:
I have a hyperlink which when clicked should do some stuff before redirecting person to browser.
XAML
<Hyperlink NavigateUri="https://payments.epdq.co.uk/ncol/prod/backoffice/"
Command="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}">
Launch Payments Portal
</Hyperlink>
now in viewModel I have property
public ICommand NavigateToTakePayment
{
get { return _navigateToTakePayment ?? (_navigateToTakePayment = new NavigateToTakePaymentCommand(this)); }
set { _navigateToTakePayment = value; }
}
but when hyperlink is clicked instead of getter being fired like one would expect NavigateToTakePaymentCommand
class Execute
method is fired instead.
public class NavigateToTakePaymentCommand : ICommand
{
public NavigateToTakePaymentCommand(PaymentViewModel paymentViewModel)
{
ViewModel = paymentViewModel;
}
public PaymentViewModel ViewModel { get; set; }
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
//your implementation stuff goes here.
}
public event EventHandler CanExecuteChanged;
}
I hope this example will clarify how the mechanism works and will save you some time.
Lamloumi Afif
Hi, I am a Software Development Engineer with a genuine interest in .Net framework. I enjoy reading books and practising sport. LinkedIn Viadeo
Updated on June 11, 2022Comments
-
Lamloumi Afif almost 2 years
I have a WPF application in which i'd like to change its design pattern to
MVVM
.I have used this snippetusing System; using System.Collections.Generic; using System.Linq; using System.Text; using FirstMVVm.Model; using System.ComponentModel; using System.Windows.Input; using System.Windows; namespace FirstMVVm.ModelView { class MyViewModel: INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private float result; public float Result { get { return result; } private set { if (result != value) { result = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Result")); } } } } public int Number { get; set; } private RelayCommand _calculatePerimeterCommand; public ICommand CalculatePerimeterCommand { get { if (_calculatePerimeterCommand == null) { _calculatePerimeterCommand = new RelayCommand(param => this.CalculatePerimeter()); } return _calculatePerimeterCommand; } } private MyModel _model; public MyViewModel() { _model = new MyModel(); } private void CalculatePerimeter(){ Result = _model.Perimetre(Number); } } }
The problem is that the
RelayCommand
type is not known and i don't know what is the assembly missing.- So how can i fix this problem?
Thanks,