2015-06-10 2 views
0

Здравствуйте, у меня есть проблема с strage с свойством SelectedItem ListBox. Это просто не работает.ListBox SelectedItem не работает в MVVM

Вот мой код:

XAML:

<TabControl HorizontalAlignment="Left" Margin="10,50,0,0" VerticalAlignment="Top" ItemsSource="{Binding WszystkieFilmy}" > 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Key}"/> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <ListBox HorizontalAlignment="Left" Height="500" VerticalAlignment="Top" Width="750" ItemsSource="{Binding Value.Filmy}" SelectedItem="{Binding Path=WybranyFilm, Mode=TwoWay}"/> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 

ViewModel:

public Film WybranyFilm 
    { 
     get { return zaznaczonyFilm; } 
     set 
     { 
      if (value != zaznaczonyFilm) 
      { 
       zaznaczonyFilm = value; 
       OnPropertyChanged("WybranyFilm"); 
      } 
     } 
    } 
    public Dictionary<String, ListaFilmow> WszystkieFilmy 
    { 
     get { return wszystkieFilmy; } 
     set 
     { 
      if (wszystkieFilmy == value) 
      { 
       return; 
      } 
      wszystkieFilmy = value; 
      OnPropertyChanged("WszystkieFilmy"); 
     } 
    } 

И "Value.Filmy" является: ObservableCollection Когда я выбрать любой элемент в ListBox это не присваивается переменной «WybranyFilm». Я не знаю, в чем причина. Я использовал почти то же решение в другом представлении, и он отлично работает. Единственное отличие состоит в том, что у меня есть ListBox один, он не входит в TabControl.

+0

'Словарь ' oh lawd. НЕ ПРИНИМАЙТЕ С словарями. Это не очень хорошо работает. Пользовательский интерфейс является обязательным для экземпляров KeyValue , а не экземпляров ListaFilmow. – Will

ответ

1

Похоже, что DataContext неверен для SelectedItem.

<TabControl x:Name="TabControl" HorizontalAlignment="Left" Margin="10,50,0,0" VerticalAlignment="Top" ItemsSource="{Binding WszystkieFilmy}" > 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Key}"/> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <ListBox HorizontalAlignment="Left" Height="500" VerticalAlignment="Top" Width="750" ItemsSource="{Binding Value.Filmy}" SelectedItem="{Binding ElementName=TabControl, Path=WybranyFilm, Mode=TwoWay}"/> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
+0

К сожалению, это не решит проблему. Я думаю, что это должно быть привязкой к Ancestor, потому что «WybranyFilm» не отображается в этом контексте, но я не знаю, как это сделать. –

+0

Да, я считаю, что вы правы. Если смотреть дальше, DataContext неверен. См. Мое редактирование –

+0

Тем не менее это не решило проблему. –

1

Просто написать:

SelectedItem="{Binding WybranyFilm}" 

Убедитесь, что модель устанавливается в качестве вида по DataContext.

Смежные вопросы