21

ボタンをクリックすると、3つのコンボボックスと2つのテキストボックスを含む新しい行が追加される動的検索ビューに取り組んでいます。

これを行うにはどうすればよいですか?

4

3 に答える 3

63

本当に mvvm を実行したい場合は、「コントロールを追加するにはどうすればよいか」を忘れるようにしてください。必要はありません。ビューモデルについて考えるだけです-WPFがコントロールを作成します:)

あなたの場合、SearchViewModel と SearchEntryViewmodel があるとしましょう。

public class SearchEntryViewmodel
{
    //Properties for Binding to Combobox and Textbox goes here
}


public class SearchViewModel 
{
    public ObservableCollection<SearchEntryViewmodel> MySearchItems {get;set;}
    public ICommand AddSearchItem {get;}
}

これまでは、ユーザー コントロール/ビューについて考える必要はありません。あなたSearchViewは を作成し、ItemsControlを にバインドItemsSourceMySearchItemsます。

<ItemsControl ItemsSource="{Binding MySearchItems}"/> 

にすべてが表示SearchEntryViewmodelsされますItemsControl(just the ToString() atm)

要件に合わせて、すべての SearchEntryViewmodel を 3Comboboxes などで表示するには、リソースで DataTemplate を定義するだけです。

<DataTemplate DataType="{x:Type local:SearchEntryViewmodel}">
    <StackPanel Orientation="Horizontal">
        <Combobox ItemsSource="{Binding MyPropertyInSearchEntryViewmodel}"/>
        <!-- the other controls with bindings -->
    </StackPanel>
</DataTemplate>

それだけです :) そして、「コントロールを動的に追加するにはどうすればよいですか?」と考える必要はありません。SearchEntryViewmodelコレクションに新しいものを追加するだけです。

このアプローチはViewmodel Firstと呼ばれ、MVVM を実行する最も簡単な方法だと思います。

于 2012-06-19T06:23:37.990 に答える
0

1 つのオプションは、新しいインスタンスを作成することにより、バックエンドで TextBoxes とコンボボックスを作成できることです。しかし、より良いオプションは、追加したいすべてのテキストボックスとコンボボックスを含む1つのユーザーコントロールを、必要な形式で作成できることです。ボタンが押されたときに作成した後、このユーザーコントロールのインスタンスを作成し、コントロールのSetValueプロパティを使用してグリッドまたはその他のコントロールに設定できます。

WPF と MVVM を初めて使用する場合は、このブログを読んで理解してください。

https://radhikakhacharia.wordpress.com/2012/06/01/wpf-tutorial-3/

https://radhikakhacharia.wordpress.com/2012/02/13/model-view-viewmodel/

于 2012-06-19T06:05:56.230 に答える
-1

MVVM と WPF の両方に慣れていない場合は、こちらの lab49で入手できる Jason Dollinger による C# / WPF / MVVM アプリケーションの設計方法に関する非常に素晴らしいビデオ チュートリアルがあります。この素晴らしいビデオで彼が開発したソースコードはすべて、ここ lab49 でも入手できます。

それを見た後は、検索ビューの開発に問題はありません。

于 2012-06-19T06:02:37.080 に答える