1

私はすでに多くの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" にイベントを設定し、コード ビハインドでコマンドを送信します。しかし、モデルやビジネス ロジックの知識がなくても、コードを空のままにしておくことはしたくありません。

これは私が持っている最も単純な例ですが、他の操作 (単純なボタンではアクセスできない操作) に対して同じ種類の必要性がある可能性があります。

ありがとうございました

4

1 に答える 1