2016-11-22 7 views
0

У меня есть страница MVVM, которая содержит ListView. Я связываю ItemSource и SelectedValue, но в первый раз он вызывает конвертер для SelectedValue, а затем загружает ItemSource.Как загрузить ItemsSource перед установкой SelectedItem в ListView?

<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" /> 

из-за того, что я теряю SelectedItem и никакие пункты не выбран. что я должен сделать, чтобы загрузить ItemsSource?

+0

Если я правильно понимаю: первый раз, когда вызывается 'IValueConverter', вы передаете' null' для преобразования? –

+0

@MatthiasHerrmann: первый раз, когда он называется, он возвращает, например, 5, но поскольку ItemSource не существует, он ничего не выбирает, а SelectedItem - Null – Maryam

ответ

0

Во-первых, вы можете попробовать ввести свой ItemsSource в codebehind. Для этого вам нужно добавить свойство UserLoaded в ваш файл xaml. Но, возможно, нам нужно увидеть ваши коды и viewmodel. В любом случае вы должны попытаться изменить свой SelectedValue режим привязки OneWay to TwoWay.

После этого вы должны посмотреть свой стиль привязки. Вы должны выполнить большую часть своих разработок в своем viewmodel, после чего вы можете просто вызвать свою модель просмотра с вашего xaml codebehind (.cs) с помощью get-set. Таким образом, у вас будет очень чистая структура связывания.

Таким образом, вы можете ввести следующим образом вместо вашей,

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

здесь Модель определена и называется в вашем коде из файла XAML (.cs). Например, в верхней части публики запечатанного класса

public YourViewModelName Model { get; set; } 

и в том же файл общественном YourXamlName()

Model = new YourViewModelName(); 

Это является быстро ответить, и я не уверен. Но вы должны сделать снимок.

Удачи.