Mam dziwny problem w mojej aplikacji Metro WinRT/C# XAML, korzystając z podglądu wydania Windows 8 (ostatnie zainstalowane poprawki). Używam ComboBox
, którego wartości ItemsSource
i SelectedValue
są zobowiązane do właściwości w ViewModel:Parametr ComboBox SelectedValue nie wyświetla się
<ComboBox SelectedValue="{Binding MySelectedValue, Mode=TwoWay}"
ItemsSource="{Binding MyItemsSource, Mode=OneWay}"
Width="200" Height="30" />
Kod tyle:
public MainPage()
{
this.InitializeComponent();
DataContext = new TestViewModel();
}
I bardzo prosta definicja z TestViewModel
, używając ciągi:
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"));
}
}
}
}
Teraz myślałem, że to proste rozwiązanie powinno po prostu działać ... Ale kiedy uruchamiam aplikację, SelectedValue="Test Item 2"
się nie wyświetla, ComboBox
jest puste. Ustawiając punkty przerwania, zauważyłem, że powiązane wartości MyItemsSource
i MySelectedValue
są poprawne pobierane z modelu widoku, gdy ustawiam DataContext
widoku. Po wykonaniu tej czynności właściwość ComboBox.SelectedValue
jest ustawiona na "Test Item 2"
, ale po prostu się nie wyświetla! Zauważyłem również, że po zmianie wybranej wartości w ComboBox przez działanie użytkownika w interfejsie użytkownika zmieniona wartość pojawia się w ComboBox, a właściwość Model widoku jest odpowiednio aktualizowana. Tak więc wszystko wydaje się działać dobrze, z wyjątkiem początkowej wizualizacji właściwości modelu widoku MySelectedValue
. Jestem teraz bardzo zdesperowany ...
Teraz, gdy jest to najprostszy przykład, w punkcie początkowym chciałem powiązać całe jednostki z ComboBox, ustawiając DisplayMemberPath
i SelectedValuePath
. Niestety, ten sam problem występuje.
czy to dla ciebie praca? –
Czy problem występuje nadal, jeśli otrzymujesz rzeczywisty element z kolekcji, zamiast przypisywać "nowy ciąg" do wybranej wartości, jak w "selectedValue = itemsSource [1]"? – Patrick