私はすでに多くのwinformと多くのWPF(MVCスタイル)を行っています。
私はMVVMパターンを調べました.今のところ、私が立ち往生しているのはCommands
.
私が得た問題は、多くのイベントに対してコマンドをスローする適切な方法が見つからないことです。
コマンドを呼び出す方法、つまりビジネス コンテキストでの相互作用が見つかりません。
例:次のMVVMモデルがあります:
public class MyDemoViewModel : DependencyObject{
private IDataManager _manager;
private static readonly DependencyProperty _currentMessageDependancyProperty = DependencyProperty.Register("CurrentMessage", typeof(String), typeof(MyDemoViewModel), new PropertyMetadata(""));
public ICommand SendMessageCommand{get; private set;}
public String CurrentMessage {
get { return(String) GetValue(_currentMessageDependancyProperty); }
set { SetValue(_currentMessageDependancyProperty, value); }
}
public MyDemoViewModel(IDataManager manager){
_manager= manager;
SendMessageCommand = new SendMessageCommand(this);
}
public void SendMessage(String message){
_manager.SendMessage(message);
CurrentMessage = String.Empty;
}
}
簡単なコマンドで:
public class SendMessageCommand :ICommand{
private MyDemoViewModel _model;
public SendMessageCommand(MyDemoViewModel model) {
_model = model;
}
public event EventHandler CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return !String.IsNullOrEmpty(_model.CurrentMessage);
}
public void Execute(object parameter)
{
_model.SendMessage( _model.CurrentMessage );
}
}
基本的な XAML:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="1" TextWrapping="Wrap" Text="{Binding CurrentMessage, UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Send" Grid.Column="1" Grid.Row="1" Command="{Binding SendMessageCommand}"/>
</Grid>
Enter誰かがTextBox のキーを押したときにコマンドが実行されるようにするには、どうすればよいですか (つまり、MVVM パターンに準拠して) 。つまり、通常は "TextChanged" にイベントを設定し、コード ビハインドでコマンドを送信します。しかし、モデルやビジネス ロジックの知識がなくても、コードを空のままにしておくことはしたくありません。
これは私が持っている最も単純な例ですが、他の操作 (単純なボタンではアクセスできない操作) に対して同じ種類の必要性がある可能性があります。
ありがとうございました