Dynamiczne dodawanie kontrolek w WPF MVVM
Pracuję nad dynamicznym widokiem wyszukiwania, w którym kliknięcie przycisku powinno dodać nowy wiersz zawierający 3 combobox i 2 pola tekstowe.
Jak mam to zrobić?
3 answers
Jeśli naprawdę chcesz zrobić mvvm, spróbuj zapomnieć "jak Mogę dodać kontrolki". Nie musisz, po prostu pomyśl o swoich viewmodelach - WPF stwórz kontole dla ciebie:) [11]}
W Twoim przypadku powiedzmy, że mamy SearchViewModel i 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;}
}
Do tej pory nie musisz myśleć o usercontrols / view. W twoim SearchView
tworzysz ItemsControl
i wiążesz ItemsSource
z MySearchItems
.
<ItemsControl ItemsSource="{Binding MySearchItems}"/>
Widzisz teraz wszystkie swoje SearchEntryViewmodels
w ItemsControl(just the ToString() atm)
.
Aby dopasować się do Twoich wymagań aby wyświetlić każdy SearchEntryViewmodel z 3comboboxami i tak dalej, wystarczy zdefiniować DataTemplate w swoich Zasobach
<DataTemplate DataType="{x:Type local:SearchEntryViewmodel}">
<StackPanel Orientation="Horizontal">
<Combobox ItemsSource="{Binding MyPropertyInSearchEntryViewmodel}"/>
<!-- the other controls with bindings -->
</StackPanel>
</DataTemplate>
To wszystko:) i nigdy nie musisz myśleć o "jak Mogę dynamicznie dodawać kontrolki?". Musisz tylko dodać nowy SearchEntryViewmodel
do swojej kolekcji.
To podejście nazywa się ViewModel First i myślę, że jest to najprostszy sposób na wykonanie MVVM.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 21:40:30
Jeśli jesteś nowy w MVVM i WPF, istnieje naprawdę wspaniały samouczek wideo, Jak to zrobić Zaprojektuj aplikację C# / WPF / MVVM autorstwa Jasona Dollingera, która jest dostępna tutaj na lab49 . Cały kod źródłowy, który opracowuje w tym niesamowitym filmie, jest dostępny również tutaj na lab49.
Po obejrzeniu nie będziesz miał żadnych problemów z rozwijaniem widoku wyszukiwania na pewno.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 06:02:37
Jedną z opcji jest to, że możesz tworzyć pola tekstowe i pola comboboxów w backendzie, tworząc nową instancję. Ale lepszą opcją jest to, że możesz utworzyć jeden usercontrol, który zawiera wszystkie texboxy i comboboxy, które chcesz dodać i w jakim formacie chcesz. Po utworzeniu po naciśnięciu przycisku można utworzyć instace tego kontrolera użytkownika i ustawić go w siatce lub dowolnej innej kontrolce za pomocą właściwości SetValue kontrolki.
Jeśli jesteś nowy w WPF i MVVM to przeczytaj to blogi, aby to zrozumieć.
Https://radhikakhacharia.wordpress.com/2012/06/01/wpf-tutorial-3/
Https://radhikakhacharia.wordpress.com/2012/02/13/model-view-viewmodel/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 17:54:24