Привязка ItemSource ListBox в XAML не работает - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть пример проекта Windows Phone 7, в котором я тестирую некоторые MVVM-файлы, но я столкнулся с проблемой.

Мой код выглядит так:

Это, с моей точки зрения, является главной страницей:

  <Grid>
        <ListBox x:Name="list" ItemsSource="{Binding _reviews}"/>
    </Grid>

Это код для представления:

      public MainPage()
        {
            this.Loaded += MainPage_Loaded;
            // Line below makes list show what it is supposed to show
            // list.ItemsSource = (DataContext as MainPageVM)._reviews;
            DataContext = new MainPageVM();
            InitializeComponent();
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            // DataContext is set to the right object!
            var obj = list.DataContext;
        }

Код для ViewModel

class MainPageVM
{
    public ObservableCollection<Review> _reviews { get; set; }

    public MainPageVM()
    {
        _reviews = GetReviews();
    }

    private ObservableCollection<Review> GetReviews()
    {
        ObservableCollection<Review> reviews = new ObservableCollection<Review>();
        reviews.Add(new Review() { User = "Lol", Text = "Cool", Country = "UK"});
        reviews.Add(new Review() { User = "misterX", Text = "aWESCOM APP", Country = "USA"});
        reviews.Add(new Review() { User = "meYou", Text = "The best", Country = "UK"});

        return reviews;
    }

А вот и моя модель:

class Review
{
    public string Text { get; set; }
    public string User { get; set; }
    public string Country { get; set; }
}

Не могли бы вы указать, где находится ошибка и почему я могу установить ItemSource в коде позади, но не через привязку в XAML

1 Ответ

0 голосов
/ 06 февраля 2011

Проблема в том, что ваш класс модели представления не реализует интерфейс INotifyPropertyChanged, и вы не вызываете событие PropertyChanged, поэтому представление не знает, что свойство, с которым вы связываетесь, изменилось.

Если вы не уверены, как реализовать этот интерфейс, посмотрите этот пост на Silverlight Show .

ОБНОВЛЕНИЕ: Для большинства свойств вышеприведенное верно, однако, в данном случае, потому что это ObservableCollection, это не обязательно. Однако, поскольку ваш класс модели представления не является общедоступным, представление не может привязываться к нему. Видите ли вы какие-либо ошибки привязки в окне вывода во время отладки?

...