2012-06-19 36 views
15

Soy relativamente nuevo en MVVM y WPF, solo quiero un guiño en la dirección correcta.Agregar controles dinámicamente en WPF MVVM

Estoy trabajando en una vista de búsqueda dinámica en la que hacer clic en un botón debería agregar una nueva fila que contenga 3 combobox y 2 cuadros de texto. ¿Cómo debo hacer esto? Gracias.

Respuesta

44

si realmente quiere hacer MVVM, tratar de olvidar "¿Cómo puedo agregar controles". no tienes que hacerlo, solo piensa en tus viewmodels - WPF crea los controles para ti :)

en tu caso digamos que tenemos un SearchViewModel y un 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;} 
} 

hasta ahora no tiene que pensar en usercontrols/view. en su SearchView, crea un ItemsControl y vincula el ItemsSource a MySearchItems.

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

que ver ahora todas sus SearchEntryViewmodels en ItemsControl (sólo el ToString() atm).

para satisfacer sus requisitos para mostrar todos los SearchEntryViewmodel con 3Comboboxes y así sucesivamente sólo hay que definir un DataTemplate en sus Recursos

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

eso es todo :) y usted nunca tiene que pensar en cómo puedo agregar controles dinamicamente. solo tiene que agregar un nuevo SearchEntryViewmodel a su colección.

este enfoque se llama Viewmodel First y creo que es la forma más fácil de hacer MVVM.

+1

Gracias. Encontré este enfoque mientras buscaba en la red. Es bueno saber que estaba en el camino correcto. – spiritqueen

0

Si usted es nuevo en tanto MVVM y WPF, hay un video tutorial realmente maravilloso sobre cómo diseñar una C#/WPF/MVVM por Jason Dollinger que está disponible aquí on lab49. Todo el código fuente que desarrolla en este increíble video también está disponible right here on lab49.

Después de verlo, no tendrá ningún problema para desarrollar su búsqueda segura.

+0

El sitio está bloqueado en nuestra oficina. Intentaremos abrir más tarde en casa. Gracias por el enlace a una buena publicación. – spiritqueen

0

Una opción es que puede crear cuadros de texto y cuadros combinados en back-end creando un nuevo instanse. Pero la mejor opción es que puede crear un control de usuario que contenga todos los texboxes y cuadros combinados que desee agregar y en qué formato desea. Después de crear cuando se presiona el botón, puede crear un insta de este control de usuario y configurarlo en la grilla o cualquier otro control utilizando SetValue propiedad del control.

Si es nuevo en WPF y MVVM, lea estos blogs para comprender esto.

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

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

+0

También bloqueado en nuestra oficina. Tendrá acceso más tarde. Gracias. – spiritqueen

Cuestiones relacionadas