Tengo una aplicación de WPF usando MVVM. Tengo algunos controles de usuario que debe demostrar una Persona de Nombre, Apellidos y correo electrónico en 3 controles de cuadro de texto utilizando el enlace simple.

El Control de Usuario tiene una simple combobox donde el usuario selecciona el ID del usuario y por lo tanto el Registro de Persona con el ID debe ser cargado (datos obtenidos de la base de datos) y, a continuación, el Nombre, Apellidos y Correo electrónico mostrará en los cuadros de texto.

Tengo un control de usuario con el combobox para los Identificadores y 3 cuadros de texto para las tres propiedades, una Clase ViewModel y un Modelo de la clase (Clase de persona) con las tres propiedades (Nombre, Apellidos y Correo electrónico).

¿Cuál es la forma más sencilla de implementar este comportamiento usando MVVM(preferentemente)? las muestras?

  • Creo que necesitas para aclarar tu pregunta poco más, Usted dijo que usted está usando MVVM, entonces, ¿cuál es la limitación que se enfrentan en su muestra?
InformationsquelleAutor Emad Gabriel | 2009-07-25

1 Comentario

  1. 6

    Supongo que por aquí ya que tu pregunta es un poco vago que no estás muy seguro de cómo conectar las piezas juntas. Por razones de simplicidad nos deja el gancho de la ViewModel directamente al control de usuario y conseguir que todos vinculante.

    Tan largo como su modelo de vista se rellena con el conjunto correcto de Personas, todos en el enlace de abajo van a manejar los datos y mostrar los datos correctos. Tome nota de que las dos vías de enlace para el elemento seleccionado en el combobox. Que permite WPF para enviar de vuelta el nuevo elemento seleccionado a la perspective.

    En el código del UserControl detrás:

    public MyUserControl()
    {
      DataContext = new MyViewModel();
    }

    En el UserControl XAML:

    <ComboBox ItemsSource="{Binding AllPeople}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
    <TextBox Text="{Binding SelectedItem.LastName}" />
    <TextBox Text="{Binding SelectedItem.FirstName}" />
    <TextBox Text="{Binding SelectedItem.EmailName}" />

    Su ViewModel:

    private IEnumerable<Person> _allPeople;
        public IEnumerable<Person> AllPeople
        {
            get { return _allPeople; }
            set
            {
                if (_allPeople != value)
                {
                    _allPeople = value;
                    NotifyPropertyChanged("AllPeople");
                }
            }
        }
    
        private Person _selectedItem;
        public Person SelectedItem
        {
            get { return _selectedItem; }
            set
            {
                if (!_selectedItem != value)
                {
                    _selectedItem = value;
                    NotifyPropertyChanged("SelectedItem");
                }
            }
        }
    
        private void NotifyPropertyChanged(string propertyName)
        {
           if ( PropertyChanged != null)
           {
             PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
           }
        }
    }
    
    public class Person
    {
     public int PersonId { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string Email { get; set; }
    }
    • Este código muestra una solución correcta, pero no compila porque utiliza SelectedPerson y SelectedItem de manera intercambiable a través. La propiedad debe ser cambiado a SelectedPerson para mayor claridad.
    • Fijo. Cambiado el código XAML para que coincida con el ViewModel. Gracias por recogerlo.

Dejar respuesta

Please enter your comment!
Please enter your name here