0

我有一个示例 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 中的绑定

4

1 回答 1

0

问题是您的视图模型类没有实现INotifyPropertyChanged接口并且您没有引发PropertyChanged事件,因此视图不知道您绑定到的属性已更改。

如果您不确定如何实现此接口,请查看Silverlight Show 上的这篇文章

更新:对于大多数属性,以上是正确的,但是,在这种情况下,因为它ObservableCollection不是必需的。但是,由于您的视图模型类不是公开的,因此视图无法绑定到它。您在调试时是否在“输出”窗口中看到任何绑定错误?

于 2011-02-06T11:35:30.137 回答