[英]XAML Binding not reflecting changes in ViewModel
我有以下代碼:
MoviePanel.xaml
<StackPanel Orientation="Horizontal" >
<Border BorderThickness="3" BorderBrush="Black">
<DockPanel Width="350">
<StackPanel VerticalAlignment="Top" Height="200">
<TextBlock Width="200" Height="50" DockPanel.Dock="Top" HorizontalAlignment="Left">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} ({1})">
<Binding Path = "_selectedMovie.title"/>
<Binding Path = "_selectedMovie.year"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<StackPanel VerticalAlignment="Top" Height="200">
<Grid HorizontalAlignment="Center">
<Image Source="star_icon.png" Width="100"/>
<TextBlock Text="{Binding _selectedMovie.rating}" Style="{StaticResource AnnotationStyle}" Width="150"/>
</Grid>
</StackPanel>
</DockPanel>
</Border>
</StackPanel>
MoviePanel.xaml.cs
public MoviePanel()
{
InitializeComponent();
_moviePanelVM = new MoviePanelViewModel();
_moviePanelVM.GetAllMovieDetails();
this.DataContext = _moviePanelVM;
}
MoviePanelViewModel.cs
public class MoviePanelViewModel : INotifyPropertyChanged
{
// List to hold movieDetail objects
public List<MediaDetail> _movies { get; set; }
public MediaDetail _selectedMovie { get; set; }
public string selectedMovieID { get; set; }
GetSelectedMovieDetails()
{
// Set _selectedMovie here
}
MediaDetail
public class MediaDetail : DependencyObject {
public ImageSource image {get; set;}
public string title {get; set;}
public string year { get; set; }
public string id { get; set; }
public string rating { get; set; }
public string description { get; set; }
public string[] cast{ get; set; }
public string[] director { get; set; }
public string[] genre { get; set; }
public string votecount { get; set; }
public string[] language { get; set; }
public string runtime { get; set; }
public string part { get; set; }
public string tagline { get; set; }
public bool isMovieSelected
{
get { return (bool)this.GetValue(isMovieSelectedProperty); }
set
{
this.SetValue(isMovieSelectedProperty, value);
}
}
public static readonly DependencyProperty isMovieSelectedProperty = DependencyProperty.Register(
"isMovieSelected", typeof(bool),
typeof(MediaDetail));
}
我遇到的問題是我的UI
尚未更新。 那是_selectedMovie.title
, _selectedMovie.year
和_selectedMovie.rating
沒有被更新。
在我的XAML
另一部分中,我綁定到_movies
,這似乎工作正常。
有人會對為什么會這樣有任何想法嗎?
謝謝您的幫助。
更新:
根據下面接受的答案,我進行了更改:
MoviePanelViewModel.cs
public class MoviePanelViewModel : INotifyPropertyChanged
{
private MediaDetail _selectedMovie;
public MediaDetail SelectedMovie
{
get { return _selectedMovie; }
set
{
_selectedMovie = value;
OnPropertyChanged("SelectedMovie");
}
}
}
實際上,這些都沒有使用 INotifyPropertyChanged
(即引發PropertyChanged
事件),因此UI無法接收更新。
特別是, MediaDetail
甚至都不是從INotifyPropertyChanged
派生的,因此,當您綁定到它的屬性時,就無法獲取更新:
<!-- Binds to properties of MediaDetail! -->
<Binding Path = "_selectedMovie.title"/>
<Binding Path = "_selectedMovie.year"/>
對於需要將其更改傳播到UI的任何屬性,請確保它引發PropertyChanged
並且UI將按預期更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.