2014-11-22 3 views
1

Пожалуйста, посмотрите на это:Databinding в XAML SelectedItem

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
      DataContext="{StaticResource vm}"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="194*"/> 
      <ColumnDefinition Width="489*"/> 
     </Grid.ColumnDefinitions> 
     <ListView HorizontalAlignment="Left" 
        ItemsSource="{Binding Path=Places}" 
        SelectedItem="{Binding Path=SelectedPlace, Mode=TwoWay}" Margin="0,96,0,0"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Path=Title}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

     <StackPanel Grid.Column="0" HorizontalAlignment="Left"> 

     <TextBlock 
     VerticalAlignment="Top" 
     Text="{Binding SelectedPlace.Title}" Margin="0,64,0,0"/> 
     </StackPanel> 


    </Grid> 

Я проходящее в списке мест, его работает нормально, и список будет отображен в окне просмотра. Проблема заключается в том, что selectedItem. Intellisense находит здесь имущество

Text="{Binding SelectedPlace.Title}" 

Но оно не отображается на виду. Когда я поставил точку останова в моем ViewModel, я могу видеть, что данное значение изменения:

public class MainViewModel : ViewModelBase 
    { 
     public ObservableCollection<Place> Places { get; set; } 

     public Place _selectedPlace { get; set; } 

     public Place SelectedPlace 
     { 
      get { return _selectedPlace; } 
      set { _selectedPlace = value; } 
     } 

     public MainViewModel() 
     { 
      Places = new ObservableCollection<Place>() 
      { 
       new Place() {Title = "London", Description = "London is a nice..."}, 
       new Place() {Title = "Dublin", Description = "Dublin is a ...."} 
      }; 
     } 
    } 

Кто-нибудь знает, что я не хватает? Спасибо

ответ

1

Вам нужно вызвать RaisePropertyChanged.

 public Place SelectedPlace 
     { 
      get { return _selectedPlace; } 
      set 
      { _selectedPlace = value; 
       RaisePropertyChanged("SelectedPlace")} 
      } 
     } 

И вы, вероятно, следует также инициализировать это свойство:

public MainViewModel() 
    { 
     Places = new ObservableCollection<Place>() 
     { 
      new Place() {Title = "London", Description = "London is a nice..."}, 
      new Place() {Title = "Dublin", Description = "Dublin is a ...."} 
     }; 
     SelectedPlace = Places[0]; 
    } 

И сделайте себе одолжение, сделав подкладочный поле свойства SelectedPlace частное поле. Вы, вероятно, хотите, чтобы изменить его, как это:

public Place _selectedPlace { get; set; } 

в

private Place _selectedPlace; 
+0

Отлично! Спасибо! – Wranglerino

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