0

最近、MVVMの概念を使用して最初のプロジェクトを開発しています (私はWPFを使用しています)。コードを書き始める前に、 MVVMに関する多くのチュートリアル (有名なJ.Smith のチュートリアル) を読みました。コーディングを始めるまで、私が読んだものはすべて明確でした...

問題は単純です。ViewレイヤーにはTextBoxes のフォームがあります。たとえば、NameTextBoxSurname 、Phone numberなどです。ユーザーがそれらすべてを入力して[ OK ] ボタンをクリックすると、新しい人物 (指定された個人情報を含む) をローカルデータベースに追加します( Entity FrameworkORMとして使用します)。

これを行うには、次のように書く必要があります。

<Button Name="MyButton" Command="MyRelayCommandWhichNeedsAllOfTheTextboxes" Content="OK" />

を使用すると、 ViewからViewModelCommandParameterに1 つのオブジェクトを渡すことができます。多くのテキストボックスがあるので、おそらく良い考えではありません。

XAMLからCommandParameter、ユーザーが入力する必要があるフォーム全体に割り当てることができます。しかし、ViewModel内では、すべてのテキスト ボックスの名前を知る必要があります。MVVM の主な前提は、すべてのレイヤー (View、ViewModel、および Model) が独立している必要があるということです。

最善の解決策は何ですか? 入力データをフォームからViewModelに渡すにはどうすればよいですか?

4

2 に答える 2

1

ビューモデルの一部としてrelayコマンドを使用することをお勧めします。そうすれば、コマンドがトリガーされたときに、必要なすべてのプロパティにアクセスできるようになります。

XAML:

<Button Name="SurnameTextBox" Text="{Binding Surname,Mode=TwoWay}" />
<Button Name="MyButton" Command="{Binding MyRelayCommand}" Content="OK" />

モデルの表示:

public class MyViewModel : INotifyPropertyChanged
{
    // (note, raise property changed on the setter
    public string Surname { get; set; }

    public ICommand MyRelayCommand { get; set; }

    public MyViewModel
    {
        // set the command callback here
        MyRelayCommand = new RelayCommand(OKCommandHandler); 
    }

    private void OKCommandHandler(object parameter)
    {
        // save the record here using Surname, etc
        // (note that you don't even need to use parameter, so you can just ignore it)
    }
}
于 2012-11-05T18:14:28.980 に答える
1

ビューモデルにはすでにすべてのデータがあるため、フォームからビューモデルにデータを渡す必要はありません。

ビューモデルは、プロパティを介してすべてのデータをビューに公開し、それにバインドします。dbasemanの回答を見てください。

于 2012-11-05T18:39:35.543 に答える