ボタンをクリックすると、3つのコンボボックスと2つのテキストボックスを含む新しい行が追加される動的検索ビューに取り組んでいます。
これを行うにはどうすればよいですか?
ボタンをクリックすると、3つのコンボボックスと2つのテキストボックスを含む新しい行が追加される動的検索ビューに取り組んでいます。
これを行うにはどうすればよいですか?
本当に 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
を にバインドItemsSource
しMySearchItems
ます。
<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 を実行する最も簡単な方法だと思います。
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/
MVVM と WPF の両方に慣れていない場合は、こちらの lab49で入手できる Jason Dollinger による C# / WPF / MVVM アプリケーションの設計方法に関する非常に素晴らしいビデオ チュートリアルがあります。この素晴らしいビデオで彼が開発したソースコードはすべて、ここ lab49 でも入手できます。
それを見た後は、検索ビューの開発に問題はありません。