2015-06-10 71 views
0

你好我有ListBox的SelectedItem屬性存在問題。它只是不起作用。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> 

視圖模型:

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 當我在列表框中選擇任何項目,它未分配給「WybranyFilm」變量。我不知道是什麼原因。我在其他視圖中使用了幾乎相同的解決方案,並且完美地工作。唯一的區別是我在那裏只有ListBox,它不是TabControl的一部分。

+0

'Dictionary 'oh lawd。不要與字典綁定。它不好用。 UI與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

不幸的是,它並沒有解決問題。我認爲它必須綁定到祖先,因爲「WybranyFilm」在這種情況下是不可見的,但我不知道該怎麼做 –

+0

是的,我相信你是對的。進一步看,DataContext是不正確的。看我的編輯 –

+0

它仍然沒有解決問題。 –

1

簡單地寫:

SelectedItem="{Binding WybranyFilm}" 

確保您的型號設置爲視圖的DataContext