簡體   English   中英

XAML綁定未反映ViewModel中的更改

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM