Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2012, 05:39
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Silverlight: ComboBox Binding, actulizar propiedad de modelo al cambiar el elemento.

Hola a todos los Foreros del mundo..

Estoy desesperado, por que no sé como solucionar este problema, no veo luz por ningún lado...

Vereis, tengo una pequeña página implementada usando el MVVM en Silverligth, cuyo modelo de datos, solo tiene tres propiedades, dos de ellas de tipo texto, y la otra es una propiedad de otra clase. Obviamente mis propiedades implementan el NotifyPropertyChanged, y demás.

Código:
public string Name{...}

public string LastName{....}

public PersonTypeModel PersonType{....}

//La clase PersonTypeModel solo tiene dos propiedades
public int Code{....}

public string Description{....}

Bien, yo cargo un DataGrid con varios objetos de este tipo. Y luego tengo unas cajas de texto enlazadas con las propiedades de texto. Cuando cambio el valor de las cajas, se actualiza correctamente el valor en la propiedad del objeto. Perfecto.

Luego tengo un combo, donde primero cargo todos los valores existentes para los PersonType que haya. Hasta aqui perfecto, ya tengo en el combo todos los PersonTypes cargados.

Cuando seleccione un elemento en el DataGrid, en el combo se selecciona el elemento correspondiente en relación a la propiedad PersonType del objeto seleccionado en el Grid. También me funciona. Perfecto.

Ahora el problema... cuando cambio el elemento del ComboBox, la propiedad asociada al objeto del elemento que está seleccionado en el Grid solo se actualiza a medias. Es decir el campo CODE. Pero en Description sigue estando el anterior.

Mi gran pregunta es, ¿Como puedo hacer, para que al cambiar el elemento en el combo, actualice la propiedad PersonType del objeto seleccionado en el Grid?

En el XAML tengo lo siguiente:
Código:
        <ComboBox Height="23" HorizontalAlignment="Left" Margin="80,215,0,0"
                  ItemsSource="{Binding PersonTypeModelList, Mode=OneWay}"
                  SelectedValue="{Binding ElementName=dataGrid1, Path=SelectedItem.PersonType.Code, Mode=TwoWay}"
                  DisplayMemberPath="Description"
                  SelectedValuePath="Code"
                  Name="comboBox1" VerticalAlignment="Top" Width="139" />
Con el código XAML de arriba, la propiedad Code del objeto del Grid se actualiza correctamente, pero la Description se queda con lo anterior.

También probe esta forma:
Código:
        <ComboBox Height="23" HorizontalAlignment="Left" Margin="80,215,0,0"
                  ItemsSource="{Binding PersonTypeModelList, Mode=OneWay}"
                  SelectedItem="{Binding ElementName=dataGrid1, Path=SelectedItem.PersonType, Mode=TwoWay}"
                  Name="comboBox1" VerticalAlignment="Top" Width="139">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <sdk:Label Content="{Binding Description}" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
De esta forma, cuando cambio el elemento del ComboBox, SI me actualiza la propiedad. Pero lo que no hace es que cuando voy navegando entre los diferentes registros del Grid me aparezca en el combo seleccionado el elemento correspondiente.... :S

Por favor, alguien puede ayudarme con esto?? Veo que no soy capaz, por más intentos que hago...
__________________
Charlie.