Я просто Узнав о MVVM в WPF, я совершенно новых как WPF, что и MVVM (я понимаю, как это работает, но никогда не использовал его ...)
Каждый учебный пособие / статью Я нахожу в Интернете, он использует либо Релайомманд или делегатекоманд.
В моем домении эти паттерны обязаны VM нарушать принцип SRP, поскольку он будет держать команду логику внутри них.
Почему бы не просто использовать пользовательскую реализацию интерфейса ICOMMAND? Так же, как это:
Представьте, что вы отображаете человека и сохраняете его в БД:
Мой XAML будет этим:
<StackPanel>
<TextBlock Width="248" Height="24" Text="The name is:: " />
<TextBlock Width="248" Height="24" Text="{Binding Name}">
</TextBlock>
<TextBox HorizontalAlignment="Left" Name="textBox1" Width="120" Height="23"
VerticalAlignment="Top" Text="{Binding Name}"
/>
<Button Name="Salvar" VerticalAlignment="Bottom"
Command="{Binding SavePerson}"
CommandParameter="{Binding}">Save</Button>
</StackPanel>
, и это моя VM:
public class PersonVM: INotifyPropertyChanged
{
private string nameValue;
public string Name
{
get{
return nameValue;
}
set
{
if (value != this.nameValue)
{
this.nameValue= value;
NotifyPropertyChanged("Name");
}
}
}
public ICommand SavePerson{ get { return new SavePersonCommand(); } }
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
, и это моя команда:
public class SavePersonCommand: ICommand
{
#region ICommand Members
public bool CanExecute(object parameter)
{
return (parameter as PersonVM) != null;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
PersonVM person = parameter as PersonVM;
if(person != null)
//Actually Save the person...
}
#endregion
}
В чем проблема с моим подходом?