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ć?

Author: ASh, 2012-06-19

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.

 50
Author: blindmeis,
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.

 0
Author: Mare Infinitus,
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/

 0
Author: R76,
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