Tengo un problema extraño en mi aplicación WinRT/C# XAML Metro, utilizando Windows 8 Release Preview (últimos parches instalados). Estoy usando un ComboBox
, cuyos valores ItemsSource
y SelectedValue
están ligados a las propiedades en un modelo de vista:ComboBox SelectedValue no muestra
<ComboBox SelectedValue="{Binding MySelectedValue, Mode=TwoWay}"
ItemsSource="{Binding MyItemsSource, Mode=OneWay}"
Width="200" Height="30" />
Código atrás:
public MainPage()
{
this.InitializeComponent();
DataContext = new TestViewModel();
}
y una definición muy simple de la TestViewModel
, el uso de cadenas:
public class TestViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private IEnumerable<string> _myItemsSource = new List<string>
{
"Test Item 1",
"Test Item 2",
"Test Item 3"
};
public IEnumerable<string> MyItemsSource
{
get { return _myItemsSource; }
}
private string _mySelectedValue = "Test Item 2";
public string MySelectedValue
{
get { return _mySelectedValue; }
set
{
_mySelectedValue = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("MySelectedValue"));
}
}
}
}
Ahora pensé que esta solución simple debería funcionar ... Pero cuando inicio la aplicación, el SelectedValue="Test Item 2"
no aparece, el ComboBox
se deja vacío. Al establecer puntos de interrupción noté que los valores límite MyItemsSource
y MySelectedValue
se recuperan corectly del Modelo de Vista cuando configuro el DataContext
de la vista. Después de esta acción, la propiedad ComboBox.SelectedValue
está realmente configurada en "Test Item 2"
, ¡pero simplemente no se muestra! También noté que cuando cambio el valor seleccionado en el ComboBox por acción del usuario en la interfaz de usuario, el valor cambiado aparece en el ComboBox y la propiedad Ver modelo se actualiza en consecuencia. Así que todo parece funcionar bien, excepto la visualización inicial de la propiedad del modelo de vista MySelectedValue
. Me estoy volviendo realmente desesperado sobre eso ...
Ahora bien, aunque este es el ejemplo más simple, en el origen quise vincular entidades enteras a ComboBox, estableciendo DisplayMemberPath
y SelectedValuePath
. Desafortunadamente, ocurre el mismo problema.
¿Eso es trabajo para usted? –
¿El problema persiste si obtiene un elemento real de la colección, en lugar de asignar "una nueva cadena" a selectedValue, como en 'selectedValue = itemsSource [1]'? – Patrick