2016-11-22 2 views
0

Ich habe eine MVVM Seite, die eine ListView enthält. Ich binde ItemSource und SelectedValue, aber erstmals ruft Konverter für SelectedValue dann ItemSource lädt.Wie wird ItemsSource geladen, bevor SelectedItem in ListView gesetzt wird?

<ListView x:Name="ListViewSurahs" 
       ItemsSource="{Binding MyItems}" 
       FlowDirection="LeftToRight" 
       Grid.Column="2" 
       Grid.Row="4" 
       VerticalAlignment="Top" 
       HorizontalAlignment="Left" 
       HorizontalContentAlignment="Center" 
       SelectionMode="Single" 
       ScrollViewer.VerticalScrollBarVisibility="Auto" 
       DisplayMemberPath="Name" 
       SelectedValuePath="ID" 
       SelectedValue="{Binding Source={StaticResource CurrentInfo}, 
             Path=Instance.ID,Mode=OneWay}" 
       ShowsScrollingPlaceholders="False" /> 

deshalb verliere ich SelectedItem und keine Elemente ausgewählt werden. Was muss ich zuerst tun, um ItemsSource zu laden?

+0

Wenn ich das richtig verstehen: Das erste Mal, wenn die 'IValueConverter' wird Sie übergeben bekommen' null' genannt zu konvertieren? –

+0

@MatthiasHerrmann: der erste Zeitkonverter wird aufgerufen, es kehrt zu Beispiel 5 zurück, aber da ItemSource nicht existiert, wird nichts ausgewählt und SelectedItem ist Null – Maryam

Antwort

0

Zum einen können Sie versuchen, Ihre Itemssource in Code-Behind eingeben. Sie müssen dazu eine UserLoaded-Eigenschaft in Ihrer XAML-Datei hinzufügen. Aber vielleicht müssen wir dein Codebehind und Viewmodel sehen. Wie auch immer sollten Sie versuchen, Ihren SelectedValue Bindungsmodus OneWay zu dem TwoWay zu ändern.

Danach sollten Sie Ihre Bindung Stil beobachten. Sie müssen die meisten Ihrer Entwicklung Fortschritt vervollständigen in Ihrem Ansichtsmodell, und danach könnten Sie einfach Ihr Viewmodel von XAML Code-Behind nennen (CS-) mit get-Set. Sie werden also eine sehr saubere Bindungsstruktur haben. Auf diese Weise

Sie eingeben können, wie anstelle von Ihnen folgt,

SelectedValue="{Binding Model.BlaBla, Mode=TwoWay}" 

hier Modell definiert und in Ihrem Code-Behind der XAML-Datei (CS-) genannt. Zum Beispiel in oben auf Ihren public sealed partielle Klasse

public YourViewModelName Model { get; set; } 

und in den gleichen Datei öffentlichen YourXamlName()

Model = new YourViewModelName(); 

Es ist ein schnell zu beantworten, und ich bin nicht sicher. Aber du solltest einen Schuss abgeben.

Viel Glück.

Verwandte Themen